ゲーム開発奮闘記

Unity・エフェクト・アプリ開発に関係した記事を書いています

Unity 2021 Admob バナー実装・ATT対応・プライバシーポリシー対応・Admob Android Force Resolveがうまく行かない時の対処・App Store のプライバシーの対応・Google Play Consoleのプライバシー対応・Google Play Console のデータセーフティの対応など色々まとめ

ここ最近、数年ぶりにUnityで作成した色々なアプリのアップデート対応を進めています。
アプリのアップデート対応をしていた時に、躓いたところを自分用のメモとしてまとめておきます。
色々と間違いもあるかもしれないので、ご参考までにお願いします!

■ここでまとめられているもの

UnityとAdmobのバージョン
  • Unity 2021.3.1f
  • GoogleMobileAds-v7.0.0.unitypackage

https://github.com/googleads/googleads-mobile-unity/releases/tag/v7.0.0

Admobバナーの実装方法 iOS

・公式よりunitypackageをダウンロードして、インポートする
公式:https://developers.google.cn/admob/unity/quick-start?hl=ja#android
unitypackage:Github: https://github.com/googleads/googleads-mobile-unity/releases/tag/v7.0.0
※今回はGoogleMobileAds-v7.0.0.unitypackageを使用

・Assets -> Google Mobile Ads -> Setting
Google Mobile Ads App IDのAndroidiOSをそれぞれ入力(※ここの入力する文字列は、アプリIDを入れること。広告のIDではない。)

※Delay app measurementのチェックをオンにしてオフにすると、Unityを再起動するたびにIDが消える現象がなくなる

・Assets>External Dependency>iOS Resolver>Settings (※iOSの場合)
(※Assets>External Dependencyが表示されないことがあったので、Unityを再起動すると表示されました。)
Cocoapods Integration : Xcode Project -Add Cocoapods to the Xcode projectを選択 > OK


・AdMob.csをUnityのGameObjectにアタッチさせる

↓に貼り付けているAdMob.csスクリプトは、ボトムバナーです。

using UnityEngine;
using System.Collections;
using GoogleMobileAds.Api;

public class AdMob : MonoBehaviour {

    private BannerView bannerView;

    public void Start()
    {

        // Google AdMob Initial
        MobileAds.Initialize(initStatus => { });

        this.RequestBanner();
    }

    private void RequestBanner()
    {
#if UNITY_ANDROID
        string adUnitId = "ca-app-pub-3940256099942544/6300978111";
#elif UNITY_IPHONE
        string adUnitId = "ca-app-pub-3940256099942544/2934735716";
#else
        string adUnitId = "unexpected_platform";
#endif

        // Create a 320x50 banner at the bottom of the screen.
        bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Bottom);
        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the banner with the request.
        bannerView.LoadAd(request);
    }
}

↑本番ビルド時には、ソース内の21,23行目を各アプリのadUnitIdに書き換えること(上記のスクリプトはテストIDを入れている)
`#if UNITY_ANDROID`
` string adUnitId = "ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx";`
`#elif UNITY_IPHONE`
` string adUnitId = "ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx";`

・Unityでビルドを行って、ビルド後に作成された、Unity-iPhone.xcodeprojをダブルクリックしてXcodeを開く

XcodeのUnity-iPhoneの下のInfo.plistを選択して、Information Property Listの+ボタンを押して、
GADIsAdManagerAppを入力して追加TypeをBooleanにしてValueをYes(1)にする。

Xcodeで実機に書き出すとテストバナー or 本番バナー(自分で設定したバナーIDのもの)が表示される。

Admobバナーの実装方法 Android

・公式よりunitypackageをダウンロードして、インポートする
公式:https://developers.google.cn/admob/unity/quick-start?hl=ja#android
unitypackage:Github: https://github.com/googleads/googleads-mobile-unity/releases/tag/v7.0.0
※今回はGoogleMobileAds-v7.0.0.unitypackageを使用

・Assets -> Google Mobile Ads -> Setting
Google Mobile Ads App IDのAndroidiOSをそれぞれ入力(※ここの入力する文字列は、アプリIDを入れること。広告のIDではない。)

※Delay app measurementのチェックをオンにしてオフにすると、Unityを再起動するたびにIDが消える現象がなくなる

~~ここまでiOSと同じです。 ~~

・Assets>External Dependency>Android Resolver>Resolver (※Androidの場合)
(※Assets>External Dependencyが表示されないことがあったので、Unityを再起動すると表示されました。)

・Resolution Succeededと表示されるので、OKを押す

・Assets>External Dependency>Android Resolver>Force Resolver (※Androidの場合)

※ここでForce Resolverが以下のエラーでうまく行かないときがあります。
The operation couldn���t be completed. Unable to locate a Java Runtime.

~~~~※Admob Android Force Resolveがうまく行かない時の対処方法~~~~
以下のことを色々と試してみる。
・Assets > External Dependency Manager > Android Resolver > Delete Resolved Liberaries
・/Users/ユーザーのフォルダ/.gradle/wrapper/dists/gradle-5.1.1-bin を削除する (Mac)
・Prefarences > External Tools >JDK installed with Unity(recommended)のチェックをオン>オフにする。
・もう一度Force Resolveをする。
・さらに、うまく行かない時は、Unityを再起動して、Prefarences > External Tools >JDK installed with Unity(recommended)のチェックをオン>オフにする。
・もう一度Force Resolveをする。
~~~~Admob Android Force Resolveがうまく行かない時の対処方法ここまで~~~~

~~~~ここからはiOSと同じ対応~~~~
・AdMob.csをUnityのGameObjectにアタッチさせる

↓に貼り付けているAdMob.csスクリプトは、ボトムバナーです。

using UnityEngine;
using System.Collections;
using GoogleMobileAds.Api;

public class AdMob : MonoBehaviour {

    private BannerView bannerView;

    public void Start()
    {

        // Google AdMob Initial
        MobileAds.Initialize(initStatus => { });

        this.RequestBanner();
    }

    private void RequestBanner()
    {
#if UNITY_ANDROID
        string adUnitId = "ca-app-pub-3940256099942544/6300978111";
#elif UNITY_IPHONE
        string adUnitId = "ca-app-pub-3940256099942544/2934735716";
#else
        string adUnitId = "unexpected_platform";
#endif

        // Create a 320x50 banner at the bottom of the screen.
        bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Bottom);
        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the banner with the request.
        bannerView.LoadAd(request);
    }
}

↑本番ビルド時には、ソース内の21,23行目を各アプリのadUnitIdに書き換えること(上記のスクリプトはテストIDを入れている)
`#if UNITY_ANDROID`
` string adUnitId = "ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx";`
`#elif UNITY_IPHONE`
` string adUnitId = "ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx";`
~~~~ここまでiOSと同じ対応~~~~

Androidの実機をつないで、Build And Runで実機にビルドする

ATT(AppTrackingTransparency)対応 iOS

参考サイト:https://www.matatabi-ux.com/entry/2021/04/08/100000
・Bootstrap という名前でシーンのHierarchyに GameObject を追加
・Bootstrap.cs スクリプトをアタッチ → スクリプトは参考サイト様のところを参照

・NativeService.csをAssets/Scriptフォルダに入れる。 → スクリプトは参考サイト様のところのを参照

・NativeService.mm というプラグインスクリプトを Assets/Plugins/iOS ディレクトリに保存する → スクリプトは参考サイト様のところのを参照

・Assets/Editor/iOS/PostBuildProcessForIOS.csを追加する
こちらのサイト様の情報を参考に。
Unity内で完結させる「AdMob広告付きアプリのiOS14対応」 - Qiita

アプリ名のローカライズ対応 iOS

・Assets/Editor/iOS/Localizations/en.lproj/InfoPlist.stringsを追加する
※InfoPlist.stringファイルはXcode>File>New>FileからStrings Fileを作成する
こちらのサイト様の情報を参考に。
Unity内で完結させる「AdMob広告付きアプリのiOS14対応」 - Qiita
・Assets/Editor/iOS/Localizations/ja-JP.lproj/InfoPlist.stringsを追加する
・Assets/Editor/iOS/Localizations/ja.lproj/InfoPlist.stringsを追加する

アプリ内のテキストやimage画像のローカライズ対応

こちらのサイト様のmbLocalize.csスクリプトローカライズしたいGameObjectにアタッチして使用する。
【Unity】英語にローカライズしてみた - D日記

お客様のアプリにはポリシーを遵守していない SDK バージョンが含まれていますの対処方法( Google Play Console)

Andoroidのアプリをアプでした後に、以下の警告をGoogle Play Consoleでメッセーを受けました。
その時の対処方法を記載します。
※解決方法は、最新のUnity Adsに更新して再申請することです。

お客様のアプリにはポリシーを遵守していない SDK バージョンが含まれています
お客様のアプリ名(バージョン コード xx)には SDK com.unity3d.ads:unity-ads、またはいずれかのライブラリと依存関係にある SDK が含まれており、この SDK は個人情報や機密情報を収集します。これには、Advertising ID, Android ID が含まれますが、これに限定されない可能性があります。ユーザーデータに関するポリシーに記載されているように、永続的なデバイス識別子をユーザーの他の個人情報や機密情報、またはリセット可能なデバイス識別子にリンクしてはなりません。

・Unity Servicesのウィンドウを開く Window/General/Services

・Adsボタンを押す (Project Settings/Servicesが開く)


・Servicesの項目のOrganizationsのプルダウンより、自分で作成したアカウントを選択し(アカウントがない場合は自分で作り方の調査お願いします!)、Create project IDを選択
※うまく行かない時がたまにあったので、うまく行かないときはUnityの再起動をして再度挑戦する。

・Unity AdsのProjectが作成される

・Will this app be primarily targeted to children under age 13?のプルダウンを選択する。
ここでは、Noを選択しました。(Yesを選ぶと、子供向けとしての色々と対応が大変そうな気がして…広告設定の細かい調整が必要なのだと思います。)

・Unity Gaming Servicesのサイトを確認すると、先程作成したUnity Adsのプロジェクトが登録されている。

・これを行った上でビルドをしてGoogle Playe Consoleにアップすると解決します。
Google Play Consoleで警告を受けたメッセージは、アーカイブして大丈夫です。

App Store のプライバシーの対応 iOS

・まずはAppのプライバシーのプライバシーポリシーの横の編集を押す

・自分のアプリに対してのプライバシーポリシーのURLを入力して、完了を押す

・はじめにを押す

・データ収集:AdMobを使用の場合「はい」を選択して、次へ
・位置情報:おおよその場所にチェック
・ID : デバイスIDにチェック
・使用状況データ:製品の操作、広告データにチェック
・診断:クラッシュデータ、パフォーマンスデータにチェック
・保存を押す
・追加の設定が必要です:OKを押す
・位置情報:おおよその場所の設定を押す

サードパーティ広告にチェック、次へ
はい、このAppから収集されるおおよその場所データはユーザの個人情報に関連付けられますか? にチェック、次へ
・トラッキングサードパーティデータ、特にチェック項目がないので、次へ
・「トラッキング」の理解のための例です:、特にチェック項目がないので、次へ
はい、おおよその場所データをトラッキング目的で使用します にチェック、保存
・同様の流れで、バイスIDを設定を押す
サードパーティ広告にチェック、次へ
はい、バイスIDをトラッキング目的で使用します にチェック、保存
・同様の流れで、製品の操作を押す
サードパーティ広告にチェック、次へ
はい、このAppから収集される製品の操作データはユーザの個人情報に関連付けられます にチェック、次へ
はい、製品の操作データをトラッキング目的で使用します にチェック、保存
・同様の流れで、広告データを設定を押す
サードパーティ広告にチェック、次へ
はい、このAppから収集される広告データはユーザの個人情報に関連付けられます にチェック、次へ
はい、広告データをトラッキング目的で使用します にチェック、保存
・同様の流れで、クラッシュデータを設定を押す
サードパーティ広告にチェック、次へ
いいえ、このAppから収集されるクラッシュデータはユーザの個人情報に関連付けられません にチェック、次へ
はい、クラッシュデータをトラッキング目的で使用します  にチェック、保存
・同様の流れで、パフォーマンスデータを設定を押す
サードパーティ広告にチェック、次へ
はい、このAppから収集されるパフォーマンスデータはユーザの個人情報に関連付けられます にチェック、次へ
・トラッキングサードパーティデータ、特にチェック項目がないので、次へ
・「トラッキング」の理解のための例です:、特にチェック項目がないので、次へ
はい、おおよその場所データをトラッキング目的で使用します にチェック、保存
・最後に公開ボタンを押す

Google Play Console のプライバシーの対応 Android

Google Play Consoleの自分の編集したいアプリのページへ行く
・アプリのコンテンツ>プライバシー ポリシー 開始ボタンを押す

・プライバシーポリシーのページのURLを入力して、保存を押す。

Google Play Console のデータセーフティの対応 Android

Google Play Consoleの自分の編集したいアプリのページへ行く
・アプリのコンテンツ>データセーフティ 開始ボタンを押す

・定義、開示する必要があるデータ 特にチェック項目がないので、次へ
・データの収集とセキュリティ:アプリは対象になる種類のユーザーデータを収集または共有しますか? はいを選択
・データの収集とセキュリティ:アプリで収集するユーザーデータはすべて、転送時に暗号化されますか? はいを選択
・データの収集とセキュリティ:自分のデータの削除をリクエストする方法をユーザーに提供していますか? いいえを選択
・次へ
・データの種類:位置情報:おおよその現在地にチェック
・データの種類:アプリのアクティビティ:その他の操作にチェック
・データの種類:アプリの情報、パフォーマンス:クラッシュログその他のアプリのパフォーマンス データにチェック
・データの種類:デバイスまたはその他の ID:バイスまたはその他の IDにチェック
・次へ
・順番に先程答えた項目の詳細を選んでいきます。まずは位置情報:おおよその現在地のを押す。

収集にチェック
はい、この収集済みデータを一時的に処理しますにチェック
データ収集は必須である(ユーザーはこのデータ収集をオフにできない)にチェック
分析にチェック
・保存を押す
・アプリの情報、パフォーマンスのクラッシュログの矢印を選びます。

収集にチェック
はい、この収集済みデータを一時的に処理しますにチェック
データ収集は必須である(ユーザーはこのデータ収集をオフにできない)にチェック
分析にチェック
・保存を押す
・アプリの情報、その他のアプリのパフォーマンス データの矢印を選びます。
収集にチェック
はい、この収集済みデータを一時的に処理しますにチェック
データ収集は必須である(ユーザーはこのデータ収集をオフにできない)にチェック
分析にチェック
・保存を押す
・アプリのアクティビティのその他の操作の矢印を選びます。
収集にチェック
はい、この収集済みデータを一時的に処理しますにチェック
データ収集は必須である(ユーザーはこのデータ収集をオフにできない)にチェック
分析にチェック
・保存を押す
・デバイスまたはその他の IDのデバイスまたはその他の IDの矢印を選びます。
収集にチェック
はい、この収集済みデータを一時的に処理しますにチェック
データ収集は必須である(ユーザーはこのデータ収集をオフにできない)にチェック
分析にチェック
・保存を押す
・次へを選択