ここ最近、数年ぶりにUnityで作成した色々なアプリのアップデート対応を進めています。
アプリのアップデート対応をしていた時に、躓いたところを自分用のメモとしてまとめておきます。
色々と間違いもあるかもしれないので、ご参考までにお願いします!
■ここでまとめられているもの
- UnityとAdmobのバージョン
- Admobバナーの実装方法 iOS
- Admobバナーの実装方法 Android
- ATT(AppTrackingTransparency)対応 iOS
- アプリ名のローカライズ対応 iOS
- アプリ内のテキストやimage画像のローカライズ対応
- お客様のアプリにはポリシーを遵守していない SDK バージョンが含まれていますの対処方法( Google Play Console)
- App Store のプライバシーの対応 iOS
- Google Play Console のプライバシーの対応 Android
- Google Play Console のデータセーフティの対応 Android
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のAndroidとiOSをそれぞれ入力(※ここの入力する文字列は、アプリ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のUnity-iPhoneの下のInfo.plistを選択して、Information Property Listの+ボタンを押して、GADIsAdManagerAppを入力して追加
— KTK_kumamoto フリーランス2年生 (@KTK_kumamoto) 2022年5月4日
TypeをBooleanにしてValueをYes(1)にする。 pic.twitter.com/LcVo6xQGA9
・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のAndroidとiOSをそれぞれ入力(※ここの入力する文字列は、アプリ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の→矢印を選びます。
・収集にチェック
・はい、この収集済みデータを一時的に処理しますにチェック
・データ収集は必須である(ユーザーはこのデータ収集をオフにできない)にチェック
・分析にチェック
・保存を押す
・次へを選択