【Unity】[iOS] Admob のための SKAdNetwork 設定

iPhone

iOS14以降でAdMobやその他広告配信サービスを使用するにあたり、収益の大幅な減少を抑えるために必要とされる SKAdNetwork をUnity環境で設定する方法についてご紹介します。

また、SKAdNetworkの設定の意味やAdmobのアップデート手順も合わせてご紹介します。




SKAdNetwork とは?

最近、Admobで以下のような実装を促す警告メッセージが表示されました。

Apple の SKAdNetwork を使用できるよう設定されていないアプリがあります
アプリのインストールなど、広告で発生したすべてのユーザーアクティビティが
正確に評価されるよう、SKAdNetwork に Google のネットワーク ID
を必ず設定してください。

SKAdNetworkとは何かを説明するために、Appleの対応から説明していきます。

AppleはiOS14からIDFAの取得許可をユーザーに設定許可させる仕組みを取り入れることになりました。(IDFAについてはこちらの記事にまとめております)

ユーザーからIDFAの取得許可をわざわざダイアログを表示して許可させることは、広告のアトリビューション(どういったメディア経路で広告にたどり着いたかだとかの貢献度情報。これがあるとより効果的な広告戦略が打てる)取得の敷居が大きく上がったことになります。

これを緩和するためにAppleはSKAdNetworkという仕組みを同時に導入しました。IDFAを使用せず、アトリビューションを広告事業者が取得できる仕組みです。

ただ、デバイスから送信できるアトリビューションは高々6bitであり情報も限定的です。ですので、残したい情報が消えてしまったり、上書かれてしまったりもします。

また、データに署名も付与されていないので、改ざんされることも想定してその程度の情報として扱う必要があるかと思います。

このように、完璧ではないです。なので緩和するという表現にしています。ただ、ないよりはマシというレベルだと思っています。

SKAdNetworkを設定する

では、UnityでAdmobを使用する際にSKAdNetworkを有効にする方法について説明していきます。設定するには以下の手順を踏みます。

  1. Google Mobile Ads Unity Plugin をVersion 5.4.0以降に上げる
  2. XcodeのInfo.plistのSKAdNetworkItems キーに、Google が定義する値を追加する

2についてはUnityのXcode EditorのPost処理に書くことで自動化していきます。

Google Mobile Ads Unity Pluginのインストール

Google Mobile Ads Unity Pluginはこちらからv5.4.0以降のバージョンをダウンロードします。

新規インストール手順については以前こちらの記事でまとめております。

古いプラグインをアップデートする手順は新規インストールと同じようにAssets→Import Package→Custom Packageから行います。

アップデート時の注意(iOS)

Unityでビルドすると以下のようなエラーが出る場合があります。

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

CocoaPodsをバージョンアップしましょう。

% sudo gem uninstall cocoapods
% sudo gem install cocoapods

アップデート時の注意(Android)

Androidに話がそれますが、AndroidのPlatformでPackageをImportするとビルドエラーが出ることがあると思います。

原因は不明(※)ですが、以下のようにPackageをImportする際にWarningが出ている状態で無理やりImportするとGradleの処理でエラーができます。

※)追記:Google Play Service APIのコンフリクトでビルドエラーが発生する場合を確認しました。Admobは自動でGoogle Play Service APIを解決する機能も同梱していますが、その機能が他のプラグインと競合してしまうようです。詳細は継続調査中です。

たとえ、フォルダの中身は消していてもWarningが残ってしまっているとビルドエラーになることがあります。上の例だとPluginsフォルダを消さないとWarningは消えませんでした。

Warningが出ている場合はフォルダごと削除して必ずWarningがない状態でImportすれば、ビルドエラーは回避できます。必要なファイルはがある場合はSVNやGitのRevertで後から戻してやれば大丈夫です。

Unityが何をもってWarningと判断しているのかわかりませんが、展開するフォルダのみを消してコピーしてもダメだったので、親フォルダ間とも何かしら管理情報と依存関係があるのかと思います。

XcodeのInfo.plist設定

XcodeのInfo.plistもUnity Build時に設定してしまいます。Assets/Editorに以下のファイルを追加します。

using System.IO;
using UnityEditor;
using UnityEditor.Callbacks;
using System.Collections;
using System.Collections.Generic;
#if UNITY_IOS
using UnityEditor.iOS.Xcode;
#endif

    public class PostXcodeBuild
    {
#if UNITY_IOS
        [PostProcessBuild]
        public static void SetXcodePlist(BuildTarget buildTarget, string pathToBuiltProject)
        {
            if (buildTarget != BuildTarget.iOS) return;

            var plistPath = Path.Combine(pathToBuiltProject , "Info.plist");
            var plist = new PlistDocument();
            plist.ReadFromFile(plistPath);

            // set info.plist
            var array = plist.root.CreateArray("SKAdNetworkItems");
            PlistElementDict dict = array.AddDict();
            dict.SetString("SKAdNetworkIdentifier", "cstr6suwn9.skadnetwork");
            File.WriteAllText(plistPath, plist.WriteToString());
        }
#endif
    }
}

SKAdNetworkItemsにcstr6suwn9.skadnetworkを追加しています。

この設定する値cstr6suwn9.skadnetworkは変更される可能性もあるので、こちらのページから常に最新であることを定期的に確認するようにします。

設定が正しくできた場合、Info.plistは以下のように表示されます。

SKAdNetworkItems設定

後はこれまでと同じようにiOSのアプリをXcodeでビルドして完成です。

おわりに

iOSでより適切な広告を表示させるためには、IDFAの取得リクエストと今回お話ししたSKAdNetworkの設定は必ず実装しておいた方がよいです。

マニュアルを見ると一見手間そうなので後回しにしてしまいがちです。(自分がそうでした。。)SKAdNetworkに関しては基本ビルドだけで対応できますので、最低限こちらの対応だけでも実施をお勧めします。

コメント

  1. […] 【Unity】[iOS] Admob のための SKAdNetwork 設定AdMobを使用していると、AdMobのホー… 【Unity】[iOS] IDFA へのアクセス許可設定 iOSで広告を効率よく適切に表示するためには、端末に一意に割り振られた番号 IDFA (Identifier for Advertisers)をアプリで取得する必要があります。この番号を使って広告主はユーザーの志向や行動をトラッキングし…hirokuma.blog2021.02.24 […]

  2. […] 【Unity】[iOS] Admob のための SKAdNetwork 設定iOS14以降でAdMobやその他広告配信サ… […]