そういうのがいいブログ

アプリ個人開発 まるブログ

アプリ開発覚え書き

MaruyuApps プライバシーポリシー

制定日:2021/05/03

このページは、Maruyu Apps(以下「私」と言います。)が提供するスマートフォンアプリ(以下「本アプリ」と言います。)における利用者情報の取扱いについて、以下のとおりアプリケーション・プライバシーポリシー(以下「本ポリシー」といいます。)を定め、公表しております。本アプリをインストールする前に本ポリシーをご確認いただき、内容をご理解の上で本アプリをご利用下さい。
なお、本ポリシーにおいて、「利用者情報」とは、お客様の識別に係る情報、通信サービス上の行動履歴、その他お客様のスマートフォンにおいてお客様と結びついた形で生成、利用又は蓄積されている情報であって、本ポリシーに基づき当社が取得するものを意味するものとします。

本アプリが利用する利用者情報

 
本アプリが利用する利用者情報は、下記の3つです。
  • アプリの広告表示のためにお客様の情報の一部を送信する可能性があります。
  • アプリではアクセス解析ツールを用いてアプリの利用状況を収集しております。
  • 問い合わせの際に利用者情報の一部を送信します。
  1. アプリの広告表示本アプリは広告表示のためにお客様の情報の一部を送信する可能性があります。広告表示は、下記2社のサービスを利用しており、本アプリは2社に利用者情報の提供を行います。それぞれのサービスが利用している利用者情報と目的については各社のサービスのプライバシーポリシーをご確認ください。

  2.アプリのアクセス解析
  本アプリではアクセス解析ツールを用いてアプリの利用状況を収集しております。

  アクセス解析Google Analyticsを利用しております。

  本アプリは画面遷移を行った際に、画面IDと利用者情報をGoogle Analytics

  に送付します。

  1. 問い合わせ
    本アプリでは問い合わせの際に利用者情報の一部を送信します。
    問い合わせはメールで行い、メール本文に下記情報が埋め込まれます。また、メールで送信されるため、メールアドレスも送信されます。
    • 名前、メールアドレス
    • 端末名、OSバージョン、その他端末情報(画面サイズ、ピクセル密度、利用可能ヒープメモリ量)
    • アドオン購入状況

利用目的

利用者情報はそれぞれ下記目的に利用されます。

  • 三者の広告の配信・表示のため
  • 当社のサービスに関連して、個人を識別できない形式に加工した統計データを作成するため
  • 本アプリに関するご案内、お問い合せ等への対応のため

【Unity】Google Play 新規リリース時設定は Android 11.0(API レベル 30)以上を対象にする必要有り

はじめに

2021年8月からGoogleのポリシー変更があり、
Google Play新規リリース時には、Unity上での設定が必要となります。
リリース済みのアプリでは、2021年11月以降のアップデートからです。

f:id:marumaro7:20210731091247p:plain Google Play  |  Android Developers

対策

>編集
>プロジェクト設定
f:id:marumaro7:20210731091706p:plain:w200


>Player
>ターゲットAPIレベル
>Automatic(highest installed)
Android11.0(API level 30)に変更します。

f:id:marumaro7:20210731091936p:plain


ビルドボタンを押すとこのようなウインドウが出てきますので、
「Update Android SDK」を押してください。
f:id:marumaro7:20210802055637p:plain

ビルドエラーしたときは・・・

Windowsだとエラーになる傾向にあるようです。
「ユニたまご」さんの記事が対策を載せてくださっています。
unitamago.com
ちなみに私の環境
MacOS:BigSur11.3
・ Unityバージョン:2020.3.15f2
ですとエラーは発生しませんでした。

おわりに

その他のポリシー情報 developer.android.com

【Unity】Visual Studio Packageバージョンアップ方法 (Visual Studio Editor Package version 2.0.11 is available, we strongly encourage you to update from the Unity Package Manager for a better Visual Studio integration)

はじめに

Unityバージョン2020.3.15f2をインストールし、プロジェクトを新規作成したところ、 このような警告が出たので対処しました。

Visual Studio Editor Package version 2.0.11 is available, we strongly encourage you to update from the Unity Package Manager for a better Visual Studio integration

f:id:marumaro7:20210731084420p:plain

対処方法

エラー内容の通りにVisual Studio Editor Packageのバージョンを上げれば良いです。

>ウインドウ
>パッケージマネージャー

f:id:marumaro7:20210731084717p:plain:w200   


Visual Studio Editor
>更新2.0.11

f:id:marumaro7:20210731085018p:plain

これで完了です。
f:id:marumaro7:20210731085304p:plain

【Unity】ローカルプッシュ通知を実装する Android & iOS

はじめに

プッシュ通知には
・サーバーを介さないローカルプッシュ
・サーバーを介するリモートプッシュ
があります。

今回はローカルプッシュを実装していきます。

<2022年8月7日 追記>
ローカルプッシュ通知&リモートプッシュ通知のUdemy講座を数ヶ月かけて作りました!

この記事の内容でもローカルプッシュ通知は実装できますが、
足りない部分について深堀りした内容となっています。

ご興味ありましたらどうぞ!

<2022年8月7日 追記>
講座に追記:Android 13.0 以降のプッシュ通知ユーザー許可必須に伴う対応スクリプトの追加

【Unityアプリ収益化入門】収益アップに効果絶大!プッシュ通知機能をコピペで実装するユニティスマホアプリ開発コース



割引クーポン情報はこちらです。(配布不定期) marumaro7.hatenablog.com

環境

Unityバージョン2020.3.2f1
Mobile Notifications 1.3.2

パッケージをインストール

Unityが用意してくれているパッケージ「Mobile Notifications」を使用します。

取り込み方法
→ウインドウ
→パッケージマネージャー

プッシュ通知 パッケージマネージャー

→パッケージの種類をUnityレジストリに変更(Unityのバージョンによっては名前が違うかもしれません。)
→mobileで検索
→Mobile Notifications
→インストール
プッシュ通知 パッケージマネージャー

設定

設定画面を開いてAndroidiOSの個別のプッシュ通知設定をしていきます。

設定画面は
→編集
→プロジェクト設定
→Mobile Notifications
で見れます。

プッシュ通知

Android設定

Androidの設定は次の3つです。

プッシュ通知

・ReSchedule on Device Restart
 有効:デバイスの再起動後にスケジュールされた通知を保持する。
 無効:スケジュールされた通知はデバイスの再起動後に削除される。

 今回は無効で運用します。


・Use Custom Activity
 有効にすると

ユーザーが通知をタップしたときに開くアクティビティを上書きできます。

 とのことなのですがよくわかりませんね。
 任意の画面を開くということですかね?
 特に使用しないので無効にして運用します。

・Notifications Icons
 通知されたときの画像を登録します。
 登録する画像は2種類あり用途とサイズは以下です。
 追記 ※このサイズで作成する必要はありません。表示されるサイズになります。

 Smallアイコン
  用途:ステータスバーに表示されるアイコン
     ( 透明部分をくりぬいた白い画像が表示されます。) 
  サイズ:48×48

 Largeアイコン
  用途:プッシュ通知欄に表示されるアイコン
  サイズ:192x192



 <アイコン設定方法>
 使用する画像は、プロジェクト内に保存されている必要があります。
 Spritesフォルダなどを作って保存しておいて下さい。  


 そして、取り込んだ画像のインスペクター上で
 「読み込み/書き込み有効」にチェックを入れて適用して下さい。
 ※これをしないとアイコン画像設定時に怒られます。

 

 今回はこのように設定しました。
 アイコンのIdentifierについては、
 コード上でわかりやすくするため次のように設定しています。
 Smallアイコン:ic_stat_notify_small
 Largeアイコン:ic_stat_notify_large

 

iOS設定

iOSの設定は次の3つです。

・Request Authorization on App Launch
 有効:アプリの起動時に承認リクエストウインドウを表示する
 無効:アプリの起動時に承認リクエストウインドウを表示しない

 Androidではプッシュ通知の許可は不要ですが、
 iOSはユーザーの許可がないとプッシュ通知を送ることができません。
 そのため、承認リクエストウインドウを出して
 プッシュ通知を許可するかどうかを選択してもらう必要があります。

 アプリ起動時に承認リクエストウインドウを表示して問題無いので
 今回は有効にして進めます。

 例:承認リクエストウインドウ
 



・Enable Push Notifications
 有効:Xcode上でプッシュ通知機能の宣言を追加する
 無効:Xcode上でプッシュ通知機能の宣言を追加しない

 リモートプッシュをする際には、
 Xcodeでプッシュ通知を使用することを宣言する必要があります。
 ローカルプッシュでは無効にしておきます。

 Xcode上の宣言設定  



・Include Core Location Framework
 特定の場所の範囲に入ったら通知するような時に使用します。
 今回は使用しないのでオフにしておきます。


 公式ドキュメント(翻訳)

iOSNotificationLocationTriggerを使用するには、[ CoreLocationフレームワークを含める]オプションを有効にする必要があります。このオプションは、フレームワークXcodeプロジェクトに追加します。CoreLocation

コード実装

次の2種類のスクリプトを作成して実装していきます。
1.「ローカルプッシュ通知送信クラスのスクリプト
2.「ローカルプッシュ通知の条件を与えて呼び出すスクリプト

1.ローカルプッシュ通知送信クラスのスクリプト作成

「LocalPushNotification」という名前でスクリプトを作成します。

#if UNITY_ANDROID
using Unity.Notifications.Android;
#endif
#if UNITY_IOS
using Unity.Notifications.iOS;
#endif
using System;


// ローカルプッシュ通知送信クラス
public static class LocalPushNotification
{
    
    // Androidで使用するプッシュ通知用のチャンネルを登録する。    
    public static void RegisterChannel(string cannelId, string title, string description)
    {
#if UNITY_ANDROID
        // チャンネルの登録
        var channel = new AndroidNotificationChannel()
        {
            Id = cannelId,
            Name = title,
            Importance = Importance.High,//ドキュメント 重要度を設定するを参照 https://developer.android.com/training/notify-user/channels?hl=ja
            Description = description,
        };
        AndroidNotificationCenter.RegisterNotificationChannel(channel);
#endif
    }




    
    /// 通知をすべてクリアーします。   
    public static void AllClear()
    {
#if UNITY_ANDROID
        // Androidの通知をすべて削除します。
        AndroidNotificationCenter.CancelAllScheduledNotifications();
        AndroidNotificationCenter.CancelAllNotifications();
#endif
#if UNITY_IOS
        // iOSの通知をすべて削除します。
        iOSNotificationCenter.RemoveAllScheduledNotifications();
        iOSNotificationCenter.RemoveAllDeliveredNotifications();
        // バッジを消します。
        iOSNotificationCenter.ApplicationBadge = 0;
#endif
    }




    
    // プッシュ通知を登録します。    
    public static void AddSchedule(string title, string message, int badgeCount, int elapsedTime, string cannelId)
    {
#if UNITY_ANDROID
        SetAndroidNotification(title, message, badgeCount, elapsedTime, cannelId);
#endif
#if UNITY_IOS
        SetIOSNotification(title, message, badgeCount, elapsedTime);
#endif
    }



#if UNITY_IOS
    // 通知を登録(iOS)
    static private void SetIOSNotification(string title, string message, int badgeCount, int elapsedTime)
    {
        // 通知を作成
        iOSNotificationCenter.ScheduleNotification(new iOSNotification()
        {
            //プッシュ通知を個別に取り消しなどをする場合はこのIdentifierを使用します。(未検証)
            Identifier = $"_notification_{badgeCount}",
            Title = title,
            Body = message,
            ShowInForeground = false,
            Badge = badgeCount,
            Trigger = new iOSNotificationTimeIntervalTrigger()
            {
                TimeInterval = new TimeSpan(0, 0, elapsedTime),
                Repeats = false
            }
        });
    }
#endif



#if UNITY_ANDROID
    
    // 通知を登録(Android)   
    static private void SetAndroidNotification(string title, string message, int badgeCount, int elapsedTime, string cannelId)
    {
        // 通知を作成します。
        var notification = new AndroidNotification
        {
            Title = title,
            Text = message,
            Number = badgeCount,

            //Androidのアイコンを設定
            SmallIcon = "ic_stat_notify_small",//どの画像を使用するかアイコンのIdentifierを指定 指定したIdentifierが見つからない場合アプリアイコンになる。
            LargeIcon = "ic_stat_notify_large",//どの画像を使用するかアイコンのIdentifierを指定 指定したIdentifierが見つからない場合アプリアイコンになる。
            FireTime = DateTime.Now.AddSeconds(elapsedTime)
        };

        // 通知を送信します。
        AndroidNotificationCenter.SendNotification(notification, cannelId);
       
    }
#endif
}



コピペで大丈夫です。
Androidのアイコンの指定は下記の部分で行なっています。
・「Androidのアイコン設定で登録したIdentifierの文字列」
・下記の「SmallIcon」または「LargeIcon」に代入する文字列
が異なっているとデフォルトのアイコンが表示されてしまいますので注意して下さい。

 //Androidのアイコンを設定
            SmallIcon = "ic_stat_notify_small",//どの画像を使用するかアイコンのIdentifierを指定 指定したIdentifierが見つからない場合アプリアイコンになる。
            LargeIcon = "ic_stat_notify_large",//どの画像を使用するかアイコンのIdentifierを指定 指定したIdentifierが見つからない場合アプリアイコンになる。

2.ローカルプッシュ通知の条件を与えて呼び出すスクリプト作成

「LocalPushTest」という名前でスクリプトを作成しました。(名前はなんでも良いです。) このコードでは3つのプッシュ通知を登録しています。

using UnityEngine;

public class LocalPushTest : MonoBehaviour
{   
    //Unityが用意した関数(名前は固定)
    //「アプリを開始した時」、「Homeボタンを押した時」、「Backボタンを押した時(ボタンはAndroidのみに存在)」、「OvewViewボタンを押した時(ボタンはAndroidのみに存在)」に実行
    private void OnApplicationFocus()
    {
        SettingPush();//プッシュ通知の設定
    }


    //プッシュ通知の設定
    private void SettingPush()
    {
        // Androidチャンネルの登録
        //LocalPushNotification.RegisterChannel(引数1,引数2,引数3);
        //引数1 Androidで使用するチャンネルID なんでもいい LocalPushNotification.AddSchedule()で使用する
        //引数2 チャンネルの名前 なんでもいい アプリ名でも入れておく
        //引数3 通知の説明 なんでもいい 自分がわかる用に書いておくもの 
        LocalPushNotification.RegisterChannel("channelId", "PushTest", "通知の説明");

        //通知のクリア
        LocalPushNotification.AllClear();

        // プッシュ通知の登録
        //LocalPushNotification.AddSchedule(引数1,引数2,引数3,引数4,引数5);
        //引数1 プッシュ通知のタイトル
        //引数2 通知メッセージ
        //引数3 表示するバッジの数(バッジ数はiOSのみ適用の様子 Androidで数値を入れても問題無い)
        //引数4 何秒後に表示させるか?
        //引数5 Androidで使用するチャンネルID 「Androidチャンネルの登録」で登録したチャンネルIDと合わせておく
        //注意 iOSは45秒経過後からしかプッシュ通知が表示されない        
        LocalPushNotification.AddSchedule("プッシュ通知一つ目", "45秒経過", 1, 45, "channelId");
        LocalPushNotification.AddSchedule("プッシュ通知二つ目", "60秒経過", 2, 60, "channelId");
        LocalPushNotification.AddSchedule("プッシュ通知三つ目", "75秒経過", 3, 75, "channelId");
    }

}


詳しくはコード内に書きましたので、概要だけ書きます。

プッシュ通知の設定関数「SettingPush()」で行っている処理は3つです。
1.Androidのチャンネルの登録 (儀式みたいなものと思っています。)
2.通知のクリア
 (予約されているプッシュ通知やアイコン上に表示されているバッジマークを消します。)
3.プッシュ通知の登録

そして、SettingPush()で設定された処理を
OnApplicationFocus()で呼び出しています。

OnApplicationFocus()の関数はUnityが用意した関数で下記の場合に実行されます。
・アプリを開始した時
・Homeボタンを押した時
・Backボタンを押した時(ボタンはAndroidのみに存在)
・OvewViewボタンを押した時(ボタンはAndroidのみに存在)

詳しくはこちら
qiita.com

SettingPush()の関数をスタート関数で実行するだけでもプッシュ通知は呼ばれますが、
アプリバックグラウンド起動中にプッシュ通知がきてアプリを開いても
プッシュ通知がリセットされません。
また、バッジ設定をしていた場合ずっとバッジのアイコンが残ったままになってしまいます。

3.オブジェクトに割り当ててビルド

空のオブジェクトを作成し「LocalPushTest」のスクリプトを割り当ててビルドして下さい。

結果

AndroidiOSにて、 アプリを開いて45秒後、60秒後、75秒後に通知が来ます。

Android

iOS

おわりに

指定日時に送るときにはこちらが参考になりそうです。

qiita.com

Unity本を出版しました!

突然ですが、Unity本を出版しました!
こちらを読むことで、スクリプトの基礎固めができます!
現在、kindle unlimitedで読み放題設定中です。今のうちにどうぞ!


もっと早く教えてほしかった!Unity C#入門

他の記事

marumaro7.hatenablog.com

参考

shikaku-sh.hatenablog.com

qiita.com

docs.unity3d.com

grtlab.com

greenkour.hateblo.jp

DanceDreamMV 利用規約

利用規約

この規約は、お客様が、MaruyuApps(以下「当社」)が提供するこのアプリ上で提供するサービス(以下「本サービス」)をご利用頂く際の取扱いにつき定めるものです。本規約に同意した上で本サービスをご利用ください。

第1条(定義)
 本規約上で使用する用語の定義は、次に掲げるとおりとします。
(1)本サービス:当社が運営するサービス及び関連するサービス
(2)本コンテンツ:本サービス上で提供される文字、音、静止画、動画、ソフトウェアプログラム、コード等の総称(投稿情報を含む)
(3)利用者 本サービスを利用する全ての方
(4)コイン:本サービスのサービス及び有償コンテンツと交換可能な仮想通貨です
(5)登録利用者:本サービスの利用者登録が完了した方
(6)ID:本サービスの利用のために登録利用者が固有に持つ文字列
(7)パスワード:IDに対応して登録利用者が固有に設定する暗号
(8)個人情報:住所、氏名、職業、電話番号等個人を特定することのできる情報の総称
(9)登録情報:登録利用者が本サービスにて登録した情報の総称(投稿情報は除く)
(10)知的財産:発明、考案、植物の新品種、意匠、著作物その他の人間の創造的活動により生み出されるもの(発見または解明がされた自然の法則または現象であって、産業上の利用可能性があるものを含む)、商標、商号その他事業活動に用いられる商品または役務を表示するもの及び営業秘密その他の事業活動に有用な技術上または営業上の情報
(11)知的財産権:特許権実用新案権、育成者権、意匠権著作権、商標権その他の知的財産に関して法令により定められた権利または法律上保護される利益に係る権利

第2条(本規約への同意)
1 利用者は、本利用規約に同意頂いた上で、本サービスを利用できるものとします。
2 利用者が、本サービスをスマートフォンその他の情報端末にダウンロードし、本規約への同意手続を行った時点で、利用者と当社との間で、本規約の諸規定に従った利用契約が成立するものとします。
3 利用者が未成年者である場合には、親権者その他の法定代理人の同意を得たうえで、本サービスをご利用ください。
4 未成年者の利用者が、法定代理人の同意がないにもかかわらず同意があると偽りまたは年齢について成年と偽って本サービスを利用した場合、その他行為能力者であることを信じさせるために詐術を用いた場合、本サービスに関する一切の法律行為を取り消すことは出来ません。
5 本規約の同意時に未成年であった利用者が成年に達した後に本サービスを利用した場合、当該利用者は本サービスに関する一切の法律行為を追認したものとみなされます。

第3条(規約の変更)
1 当社は、利用者の承諾を得ることなく、いつでも、本規約の内容を改定することができるものとし、利用者はこれを異議なく承諾するものとします。
2 当社は、本規約を改定するときは、その内容について当社所定の方法により利用者に通知します。
3 前本規約の改定の効力は、当社が前項により通知を行った時点から生じるものとします。
4 利用者は、本規約変更後、本サービスを利用した時点で、変更後の本利用規約に異議なく同意したものとみなされます。

第4条(アカウントの管理)
1 利用者は、利用に際して登録した情報(以下、「登録情報」といいます。メールアドレスやID・パスワード等を含みます)について、自己の責任の下、任意に登録、管理するものとします。利用者は、これを第三者に利用させ、または貸与、譲渡、名義変更、売買などをしてはならないものとします。
2 当社は、登録情報によって本サービスの利用があった場合、利用登録をおこなった本人が利用したものと扱うことができ、当該利用によって生じた結果ならびにそれに伴う一切の責任については、利用登録を行った本人に帰属するものとします。
3 利用者は、登録情報の不正使用によって当社または第三者に損害が生じた場合、当社および第三者に対して、当該損害を賠償するものとします。
4 登録情報の管理は、利用者が自己の責任の下で行うものとし、登録情報が不正確または虚偽であったために利用者が被った一切の不利益および損害に関して、当社は責任を負わないものとします。
5 登録情報が盗用されまたは第三者に利用されていることが判明した場合、利用者は直ちにその旨を当社に通知するとともに、当社からの指示に従うものとします。

第5条(個人情報等の取り扱い)
個人情報及び利用者情報については、当社が別途定める「DanceDreamMVプライバシーポリシー」に則り、適正に取り扱うこととします。

第6条(禁止行為) 
本サービスの利用に際し、当社は、利用者(以下「利用者」)に対し、次に掲げる行為を禁止します。当社において、利用者が禁止事項に違反したと認めた場合、利用停止、投稿削除等、当社において必要と判断した措置を取ることができるものとし、利用者はこれを異議なく同意するものとします。
(1)当社または第三者知的財産権を侵害する行為
(2)当社または第三者の名誉・信用を毀損または不当に差別もしくは誹謗中傷する行為
(3)当社または第三者の財産を侵害する行為、または侵害する恐れのある行為
(4)当社または第三者に経済的損害を与える行為
(5)当社または第三者に対する脅迫的な行為
(6)コンピューターウィルス、有害なプログラムを仕様またはそれを誘発する行為
(7)本サービス用インフラ設備に対して過度な負担となるストレスをかける行為
(8)当サイトのサーバーやシステム、セキュリティへの攻撃
(9)当社提供のインターフェース以外の方法で当社サービスにアクセスを試みる行為
(10)一人の利用者が、複数の利用者IDを取得する行為
(11)上記の他、当社が不適切と判断する行為

第7条 (コンテンツの取り扱い)
1 利用者は、本サービスのコンテンツを当社の定める範囲内でのみ使用することができるものとします。
2 本サービスで提供される全てのコンテンツに関する権利は当社が有しており、利用者に対し、当社が有する特許権実用新案権意匠権、商標権、著作権、その他知的財産権の実施または使用許諾をするものではありません。
3 利用者は、当社の定める使用範囲を超えていかなる方法によっても複製、送信、譲渡(利用者同士の売買も含みます)、貸与、翻訳、翻案、無断で転載、二次使用、営利目的の使用、改変、逆アセンブル、逆コンパイルリバースエンジニアリング等を行う事を禁止します。
4 前項に関わらず、退会等により利用者が利用者資格を喪失した場合は、提供されたコンテンツの使用権も消滅するものとします。

第8条(有料コンテンツ)
1 本サービス内の一部については、対価を支払うことにより有料コンテンツを購入することができます。有料コンテンツの金額、決済方法その他の事項は、別途当社が定め、本サービスまたは当社ウェブサイトに表示します。
2 当社は、本サービスにおいて無償または有料とされているコンテンツについて、当社の裁量でその価格を変更することがあります。
3 有料コンテンツは、利用者本人の登録情報に対してのみ使用が許諾されます。

第9条(コインの取り扱い)
1 当社は、本サービスにおいて利用者がコインを購入した場合、当社がキャンペーンを実施する場合その他の場合に、当社の定める方法により、利用者にコインを付与します。コインの購入単位、価格、有効期間、その他のコインの付与条件は、当社が定め、本サービス上に表示します。
2 コインの消費については、有料コインから消費されるものとします。
3 当社は、利用者が取得したコインについて、法令上必要な場合を除き、一切払い戻しを行いません。法令に基づきコインを払い戻す場合の払戻方法および条件は、別途当社が定める方法で掲示するものとします。

第10条(換金行為の禁止等)
本サービス内で取得した一切のコンテンツまたは仮想通貨については、直接、第三者による仲介又はインターネットオークション等その手段を問わず、売買その他、金銭その他現実世界における対価を授受する形でのあらゆる譲渡、譲受、貸与、借用等する行為(いわゆるRMTリアルマネートレード】を含みますが、これに限られません。また、本サービス内におけるユーザーの行為に対して金銭その他、現実世界における対価を授受することも含みます。)を禁止いたします。

第11条(免責)
1 当社は、本サービスの内容変更、中断、終了によって生じたいかなる損害についても、一切責任を負いません。
2 当社は、利用者の本サービスの利用環境について一切関与せず、また一切の責任を負いません。
3 当社は、本サービスが利用者の特定の目的に適合すること、期待する機能・商品的価値・正確性・有用性を有すること、利用者による本サービスの利用が利用者に適用のある法令または業界団体の内部規則等に適合すること、および不具合が生じないことについて、何ら保証するものではありません。
4 当社は、本サービスが全ての情報端末に対応していることを保証するものではなく、本サービスの利用に供する情報端末のOSのバージョンアップ等に伴い、本サービスの動作に不具合が生じる可能性があることにつき、利用者はあらかじめ了承するものとします。当社は、かかる不具合が生じた場合に当社が行うプログラムの修正等により、当該不具合が解消されることを保証するものではありません。
5 利用者は、AppStore、GooglePlay等のサービスストアの利用規約および運用方針の変更等に伴い、本サービスの一部又は全部の利用が制限される可能性があることをあらかじめ了承するものとします。
6 当社は、本サービスを利用したことにより直接的または間接的に利用者に発生した損害について、一切賠償責任を負いません。
7 当社は、利用者その他の第三者に発生した機会逸失、業務の中断その他いかなる損害(間接損害や逸失利益を含みます)に対して、当社が係る損害の可能性を事前に通知されていたとしても、一切の責任を負いません。
8 第1項乃至前項の規定は、当社に故意または重過失が存する場合又は契約書が消費者契約法上の消費者に該当する場合には適用しません。
9 前項が適用される場合であっても、当社は、過失(重過失を除きます。)による行為によって利用者に生じた損害のうち、特別な事情から生じた損害については、一切賠償する責任を負わないものとします。 
10 本サービスの利用に関し当社が損害賠償責任を負う場合、当該損害が発生した月に利用者から受領した利用額を限度として賠償責任を負うものとします。
11 利用者と他の利用者との間の紛争及びトラブルについて、当社は一切責任を負わないものとします。利用者と他の利用者でトラブルになった場合でも、両者同士の責任で解決するものとし、当社には一切の請求をしないものとします。
12 利用者は、本サービスの利用に関連し、他の利用者に損害を与えた場合または第三者との間に紛争を生じた場合、自己の費用と責任において、かかる損害を賠償またはかかる紛争を解決するものとし、当社には一切の迷惑や損害を与えないものとします。
13 利用者の行為により、第三者から当社が損害賠償等の請求をされた場合には、利用者の費用(弁護士費用)と責任で、これを解決するものとします。当社が、当該第三者に対して、損害賠償金を支払った場合には、利用者は、当社に対して当該損害賠償金を含む一切の費用(弁護士費用及び逸失利益を含む)を支払うものとします。
14 利用者が本サービスの利用に関連して当社に損害を与えた場合、利用者の費用と責任において当社に対して損害を賠償(訴訟費用及び弁護士費用を含む)するものとします。

第12条(広告の掲載について)
利用者は、本サービス上にあらゆる広告が含まれる場合があること、当社またはその提携先があらゆる広告を掲載する場合があることを理解しこれを承諾したものとみなします。本サービス上の広告の形態や範囲は、当社によって随時変更されます。

第13条(サービスの終了)
1 当社は、利用者への適宜の方法で通知することにより、本サービスを終了することができるものとします。
2 利用者は、本サービスが終了した場合、有料コンテンツを利用する権利一切を失い、以後、当該有料コンテンツを利用できなくなることをあらかじめ異議なく同意するものとします。
3 当社は、本サービスが原因を問わず終了した場合、これに起因して生じた利用者または第三者が被った損害について、一切責任を負わないものとします。

第14条(権利譲渡の禁止)
1 利用者は、予め当社の書面による承諾がない限り、本規約上の地位および本規約に基づく権利または義務の全部または一部を第三者に譲渡してはならないものとします。
2 当社は、本サービスの全部または一部を当社の裁量により第三者に譲渡することができ、その場合、譲渡された権利の範囲内で利用者のアカウントを含む、本サービスに係る利用者の一切の権利が譲渡先に移転するものとします。

第15条(分離可能性)
本規約のいずれかの条項又はその一部が、消費者契約法その他の法令等により無効又は執行不能と判断された場合であっても、本規約の残りの規定及び一部が無効又は執行不能と判断された規定の残りの部分は、継続して完全に効力を有するものとします。

第16条(当社への連絡方法)
本サービスに関する利用者の当社へのご連絡・お問い合わせは、本サービスまたは当社が運営するwebサイト内の適宜の場所に設置するお問い合わせフォームからの送信または当社が別途指定する方法により行うものとします。

第17条(準拠法、管轄裁判所)
1 本規約の有効性,解釈及び履行については,日本法に準拠し,日本法に従って解釈されるものとする。
2 当社と利用者等との間での論議・訴訟その他一切の紛争については、当社の所在地を管轄する裁判所を専属的合意管轄とします。

2021年1月1日 施行

【Unity】AdMob GoogleMobileAds-v5.4.0 を v6.0.0に上げた際のエラー対応

環境

macOS 11.3
Google Mobile Ads Unity Plugin v6.0.0
Xcode 12.5
Unity 2020.3.2f1

はじめに

AdMobのプラグイン
GoogleMobileAdsの新しいバージョン6.0.0が半年ぶりくらいにでました。
そして、 v5.4.0からv6.0.0へ上げたら大量のエラーが出たので対応した話です。

https://pbs.twimg.com/media/E18jEzLUYAQKpHQ?format=jpg&name=large

結論 まだバージョンを上げてはいけない

だいたいのエラーは取り除けましたが、下記のエラーが発生しています。
これはプラグイン起因のようで、iOSのビルドが通らない状態です。
(Androidは実機で問題なく広告表示できることを確認しました。)

なので、プラグインのアップデートを待ちたいと思います。

github.com

<追記 2021年8月4日>
プラグインバージョンv6.0.2を新規プロジェクトに入れた状態で
ビルドした場合、エラーが出ないことを確認しました。
ただ、admobのアプリIDがUnityを開く度に消えてしまうのは直っていません。

<追記 2021年10月1日> 
アプリIDは"おわりに"の項目に追記した内容で保存されます。 v6.0.2にして問題無さそうです。

対応

エラーの読み込み方法の変更

×旧:args.Message
◯新:args.LoadAdError

//バナー読み込み失敗 となった時に起動する関数
    public void HandleAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
    {    
        //×旧:args.Message
        //◯新:args.LoadAdError
        Debug.Log("バナー読み込み失敗" + args.LoadAdError);//args.LoadAdError:エラー内容 
    }

テストデバイス設定の削除

アダプティブバナーのサンプルコードに下記がありますが、
AddTestDeviceは使えなくなっているので削除します。
(テストデバイスの設定はadmobの設定画面から行えますので無くても問題ないです。)

AdRequest adRequest = new AdRequest.Builder()
            .AddTestDevice(AdRequest.TestDeviceSimulator)
            .AddTestDevice("0123456789ABCDEF0123456789ABCDEF")
            .Build();

変更後

AdRequest adRequest = new AdRequest.Builder().Build();

エラーの型変更

リワード広告のサンプルコードではこのようになっています。

//旧 v5.4.0
 //リワード読み込み失敗 となった時に起動する関数
    public void HandleRewardedAdFailedToLoad(object sender, AdErrorEventArgs args)
    {
        Debug.Log("リワード広告読み込み失敗" + args.Message);//args.Message:エラー内容 
    }

変更
・AdErrorEventArgs→AdFailedToLoadEventArgs
・args.Message→args.LoadAdError

//新 v6.0.0
 //リワード読み込み失敗 となった時に起動する関数
    public void HandleRewardedAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
    {
        Debug.Log("リワード広告読み込み失敗" + args.LoadAdError);//args.LoadAdError:エラー内容 
    }

不要なデータを削除

1.データ削除

v6.0.0を入れた新規プロジェクトと見比べたところ、
いろいろとゴミがありました。
一旦GoogleMobileAdsとPluginsを消して入れ直したらエラーが解消されました。

2.アプリIDの再設定

アプリIDの情報も一緒に消えてしまうのでアプリIDを再設定してください。
また、Unityを開き直した際、アプリIDは保存されないため再度入力が必要です。
→アセット
Google Mobile Ads
→Settings

3.iOSプラグイン再設定

ATT対応でiOSプラグインにファイルを追加している場合は再追加をお忘れなく! marumaro7.hatenablog.com

iOS設定

下記2点の変更が必要です。
・Cocoapods integrarionを
 Xcode Project - Add Cocoapods to the Xcode projectへ変更
 (元から設定していても、データを消したせいかデフォルトに戻っていました。)
・Link frameworks staticallyを有効

→アセット
→External Dependency Manager
iOS Resolver
→設定

CocoaPodsのアップデート

ここまでの設定するとコード上のエラーはなくなります。
しかし、ビルド後、下記のエラーが出るようになりました。

エラー抜粋

Analyzing dependencies [!] GoogleAppMeasurement requires CocoaPods version >= 1.10.0, which is not satisfied by your current version, 1.9.1.


依存関係の分析[!] GoogleAppMeasurementにはCocoaPods
バージョン> = 1.10.0が必要ですが、これは現在のバージョン 1.9.1では満たされていません。

ということでCocoaPodsのバージョンを上げました。

marumaro7.hatenablog.com

おわりに

アプリIDが保存されないうちは前バージョンのv5.4.0が無難ですね。
(自動設定することもできるようですが、いじりたくない)

<追記 2021年10月1日> 
アプリID入力画面にて、
Delay app measurmentのチェックを付けて外せばアプリIDが保存されます。


最後に宣伝させてください。
アプリ開発を始めて丸2年が経ち、
節目としてなにか形にしたいと思い、Udemy講座を出しました!
www.udemy.com

ブログ限定割引リンクは私のプロフィールページにあります。
アプリ開発収益化を時短したい方向けの講座となっております。

Unity本を出版しました!

突然ですが、Unity本を出版しました!
こちらを読むことで、スクリプトの基礎固めができます!
現在、kindle unlimitedで読み放題設定中です。今のうちにどうぞ!


もっと早く教えてほしかった!Unity C#入門

参考

github.comdevelopers.google.com

guides.cocoapods.org qiita.com

t.co

なんもわからん状態からCocoaPodsのアップデートをした

はじめに

UnityでビルドしたところCocoaPodsのバージョンが低いとエラーが出ました。
前知識がない状態から 恐る恐るアップデートをした履歴です。

ターミナルから行うので、自己責任でお願い致します。

CocoaPodsとは

guides.cocoapods.org

CocoaPodsは、Xcodeプロジェクトのライブラリ依存関係を管理します。

アップデート方法

1.ターミナルを起動

ターミナルから操作する必要があるらしいので、ターミナルを起動します。

Finder>アプリケーション>ユーティリティ>ターミナル

ターミナルを起動すると、起動した時間とコンピューター名が勝手に表示されます。

ターミナルについては、こちらで勉強しました。
techacademy.jp

2.更新するコマンドを入力する

ターミナルに下記コマンドを入力してエンターキーを押します。

sudo gem install cocoapods

ターミナルの画面

管理者パスワード(パソコンのログインに使っているパスワードでいけました。)
を求められるので入力します。
注)パスワード入力の際、どこにも表示されません。

ターミナルで sudo コマンドを使うには管理者パスワードが必要 - Apple サポート (日本)

ターミナルでパスワードを入力する際、画面には何も表示されません。
間違ったパスワードを入力したり、パスワードを何も入力しなかった場合は、
コマンドは実行されず、もう一度やり直すように案内されます。

パスワードを入力してエンターキーを押すと、動きだすのでしばらく待ちます。
停止したら完了です。

(参考)完了後の画像

おわりに

ビルドし直したところ、無事CocoaPodsのエラーは消えました!

追記

2022年6月12日
ビルド時、cocoapodsのバージョンが低いとエラーが出たため
同様にアップデートを行いました。

その際、下記のような「上書きしますか?」的な問いが出たので「y」を押して進めました。

また、インストール後、初期設定のコマンド

pod setup

を打ち、 Setup completed と出たので終了しました。

追記(備忘録)

2022年6月24日
Xcodeアーカイブエラー
→Unityを見ると下記のエラーが出ていました。

iOS framework addition failed due to a CocoaPods installation failure. This will will likely result in an non-functional Xcode project.

After the failure, "pod repo update" was executed and succeeded. "pod install" was then attempted again, and still failed. This may be due to a broken CocoaPods installation. See: https://guides.cocoapods.org/using/troubleshooting.html for potential solutions.

pod install output:

結局、Google Mobile Adsをv6.1.2→v7.0.2にすることで、エラーは消えました!

環境
MacOS:Monterey 12.4
Unity:2021.3.3f1
Xcode:13.4.1
Google Mobile Ads:v7.0.2

過程で以下の処理を行いましたが、エラーは解決しませんでした。
ただ、思い出したくなりそうなので、備忘録として残しておきます。



<以下 備忘録>
こちらを参考に進めました。

qiita.com

解決方法
cocoapodsがうまく動いていないらしい。
gemでインストールしていたcocoapodsをアンインストールして、homebrewでインストールし直した。 cocoapodsをアンインストールする
ターミナルで以下を実行する。

sudo gem uninstall cocoapods -n /usr/local/bin


さらにcocoapods関連のものをすべて表示する。

gem list --local | grep cocoapods

私の環境では以下のように実行結果が表示された。

cocoapods-core (1.8.4)
cocoapods-deintegrate (1.0.4)
cocoapods-downloader (1.3.0)
cocoapods-plugins (1.0.0)
cocoapods-search (1.0.0)
cocoapods-stats (1.1.0)
cocoapods-trunk (1.4.1)
cocoapods-try (1.1.0)

これらをすべてアンインストールしていく。

sudo gem uninstall cocoapods-core -n /usr/local/bin
sudo gem uninstall cocoapods-deintegrate -n /usr/local/bin
sudo gem uninstall cocoapods-downloader -n /usr/local/bin
sudo gem uninstall cocoapods-plugins -n /usr/local/bin
sudo gem uninstall cocoapods-search -n /usr/local/bin
sudo gem uninstall cocoapods-stats -n /usr/local/bin
sudo gem uninstall cocoapods-trunk -n /usr/local/bin
sudo gem uninstall cocoapods-try -n /usr/local/bin

すべてSuccessfully uninstalledと表示されてアンインストールされたはず。 一応もう一度listを表示してすべてアンインストールされたことを確認する。

gem list --local | grep cocoapods

.cocoapodsを削除する。

rm -rf ~/.cocoapods

Homebrewでcocoapodsをインストールし直す

ターミナルで以下のコマンドをすべて実行する。

brew install cocoapods
rm '/usr/local/bin/pod'
brew unlink cocoapods
brew link --overwrite cocoapods

Unityを再起動してもう一度iOSビルドしたらちゃんとxcworkspaceが生成されていた。



そのまま真似て実行していきました。

私の環境では、
gem list --local | grep cocoapods
の実行で以下が表示される結果となっています。

cocoapods-core (1.11.3)
cocoapods-deintegrate (1.0.5)
cocoapods-downloader (1.6.3)
cocoapods-plugins (1.0.0)
cocoapods-search (1.0.1)
cocoapods-trunk (1.6.0)
cocoapods-try (1.2.0)


また、以下コマンドは、実行完了まで数分かかっています。

rm -rf ~/.cocoapods



以下の画像は、実際に実行した履歴です。

・・・省略・・・


→その後、Unityでのビルドエラー改善せず。
 よくエラー文を見ると、以下のエラーが大量に出ている。

Ignoring json-1.8.6 because its extensions are not built. Try: gem pristine json --version 1.8.6

エラー文の通り、ターミナルにて下記を実行。
実行権限付与のためsudoを付けます。

sudo gem pristine json --version 1.8.6

実行画面

→その後、ビルド
→ビルドは通るものの、同様にCocoaPodsのエラーが発生  (文書は微妙に変わっている)

MacOS:Monterey でGoogle Mobile Ads:v6.1.2 のビルドはうまくいかないことを思い出す
Google Mobile Adsをアップグレード v6.1.2 → v7.0.2
→ビルド後のエラーなくなる。

→ターミナルで sudo gem pristine json --version 1.8.6 を実行したことが気になり、
 もう一度、下記を実行しました。
 →cocoapodsをアンインストール
 →homebrewでインストールし直す
 →cocoapodsをアンインストールする
 

<備忘録 おわり>

Unity本を出版しました!

突然ですが、Unity本を出版しました!
こちらを読むことで、スクリプトの基礎固めができます!
現在、kindle unlimitedで読み放題設定中です。今のうちにどうぞ!


もっと早く教えてほしかった!Unity C#入門

参考

guides.cocoapods.org support.apple.com

qiita.com