Unity

【Unity】admobをiOS14に対応させた話

2021-03-16

バージョン

Unity:2020.1.4f1

Xcode:12.3

AdMobプラグイン:5.4.0 (GoogleMobileAds-v5.4.0.unitypackage)

 

前提

・すでにAdMobを実装している方(広告表示できている方)

・端末がiOS14の方(iOS13以下の人はアップデートしてね!)

 

はじめに

いよいよ本格的に、iOS14対応しなくてはいけなくなったので重い腰を上げて実装しました

備忘録も兼ねて、その時の手順をここにまとめておこうと思います

(思っていたよりは以外に簡単でした)

 

前提としてAdMobのiOSプラグインのバージョンが 7.64.0 である必要がありましたが

Google Mobile Ads Unity Plugin v5.4.0のダウンロードサイト(GitHub)を見てみると

  • Google Play services 19.5.0
  • Google Mobile Ads iOS SDK 7.68.0
  • External Dependency Manager for Unity 1.2.161.

と記載があったのでここは問題なさそうです!

ちなみに、私が使っていたGoogle Mobile Ads Unity Pluginのバージョンが古かったので、一度プラグインをプロジェクトから削除して再度importしました〜

バージョンアップが必要な方はこちらの記事を参考にしていただければと思います!

【Unity】AdMobのアップデート

バージョン Unity:2020.1.4f1   AdMobバージョンを確認する方法 まずは、現在プロジェクトにimportしてあるadmobのバージョンを確認する方法です すでに最新バージ ...

続きを見る

 

 

iOS14でATTダイアログを表示するまでの流れ

ATT(App Tracking Transparency)ダイアログというのはこれです!

ATTダイアログ表示

 

これを表示させるためには、最低限やることが3つあります

 

ステップ1:ATTダイアログを表示する処理を追加

ステップ2:Info.plistに「Privacy - Tracking Usage Description」を追加

ステップ3:「AppTrackingTransparency.framework」を追加

 

※SKAdNetworkを有効にする必要もあるのですが、これは自動的になっていたので特にすることはありませんでした

 

では、順番に説明していきます!

 

ステップ1:ATTダイアログを表示する処理を追加

いきなりですが、ここが一番面倒です頑張りましょう!

Objective-Cでダイアログを表示する処理を書いて、Unity(C#)からその処理を呼ぶって流れをとります

つまり作成するファイルはObjective-C(.mm)とC#(.cs)の二つ!

では順番にObjective-Cからやっていきましょう

 

Objective-C(.mm)

Xcodeでファイルを作成します(他のテキストエディタでも構いません!)

今回はファイル名を「RequestAttDialog」としました

(ちなみに、XcodeでObjective-Cを選んで作成されるファイルは「.m」ですがファイル名変更で「.mm」とできます)

この作成したファイルをUnityプロジェクトの Assets > Plugin > iOS のなかに移動させてください

そして、実際にメソッドを記載していきます(ほとんど参考サイトのコピペですが笑)

//  RequestAttDialog.mm ファイル名.mmにしたらここも.mmにしてあげて!
//  Unity-iPhone

#import <Foundation/Foundation.h>
//以下、2行追加
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AdSupport/AdSupport.h>


//この範囲のコードはCで書かれてるよってこと
#ifdef __cplusplus
extern "C" {
#endif

//ATTダイアログを表示するメソッド
void requestIDFA() {
    if (){
        [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
        // Tracking authorization completed. Start loading ads here.
        // [self loadAd];
        }];
    }
}

#ifdef __cplusplus
}
#endif

 

次は、Unityに戻りましょう〜

 

C#(.cs)

Unityに戻ったら適当にファイルを作成してください

私は「ShowAttDialog」というファイルを作成しました

using System.Runtime.InteropServices;


public class ShowAttDialog
{
#if UNITY_IOS

    [DllImport("__Internal")]
    private static extern int requestIDFA();
    //public staticにしているのd外部ファイルで「ShowAttDialog.RequestIDFA()」とすれば呼び出せます
    public static void RequestIDFA()
    {
        requestIDFA();
    }

#endif
}

 

上記の、ように実装すればあとは外部ファイルから「ShowAttDialog.RequestIDFA();」と呼び出すだけでダイアログが表示されるはずです!

 

何か適当なファイルを作ってStart関数などにShowAttDialog.RequestIDFA();と追加して

ビルドしてください!

 

ステップ2:Info.plistに「Privacy - Tracking Usage Description」を追加

次はInfo.plistの編集をしていきます

UnityでビルドしたプロジェクトをXcodeで開いてください

Info.plistを開いたらInformation Property List と書いてあるところにマウスカーソルを持っていくと「+マーク」が表示されるのでそれクリックして「Privacy - Tracking Usage Description」と入力してください

Info.plist編集

 

そんでもって、ダイアログに表示したい文言をValueに書きましょう〜

(とりあえず「見えてる〜?」ってしましたが真似はしないでください)

例えば「あなたに関係のある広告を表示するために使用します」とかですね

 

これでステップ2も完了です!

 

はい!最後!

 

ステップ3:「AppTrackingTransparency.framework」を追加

Xcodeで TARGETS > UnityFramework > +(プラス)の順でクリックして

「AppTrackingTransparency.framework」を追加してください!

frameworkの追加

 

frameworkの検索

 

これで完了です〜

iOS14にした端末をつないでビルドしてみてください

※ダイアログが表示されない場合、端末の設定を確認してみてください!

端末の設定 > プライバシー > トラッキング > Appからのトラッキング要求を許可

これがオフになっていた場合、オンにして再度アプリをインストールしてみてください!

 

ただ、毎回ビルドした後にframeworkを追加したりInfo.plistを編集するのはめんどくさいので、番外編としてやり方を記載していきます

 

スポンサーリンク

 

以下、番外編

ここでは、プロジェクトビルド後に自動でframeworkを追加し、info.plistを編集してくれる方法(というかスクリプト)を書いていきます

Assets > Editor にファイルを一つ作ってください(Editorフォルダがない場合は作成してください)

私は、「AddElementsInfoplist」としました

 

作成したファイルに以下かのような処理(クラス名以外)を実装してください

#if UNITY_IOS

using UnityEditor;
using UnityEditor.Callbacks;
using UnityEditor.iOS.Xcode;
using UnityEngine;


public class AddElementsInfoplist
{

    [PostProcessBuild]
    public static void OnPostProcessBuild(BuildTarget buildTarget, string buildPath)
    {
        // Info.plist に Privacy - Tacking Usage Description(NSUserTrackingUsageDescription)を追加する(ステップ2)
        string infoPlistPath = buildPath + "/Info.plist";
        PlistDocument infoPlist = new PlistDocument();
        infoPlist.ReadFromFile(infoPlistPath);
        PlistElementDict root = infoPlist.root;
        root.SetString("NSUserTrackingUsageDescription", "あなた様の好みに合わせた広告を表示するために使用されます!!!!");
        infoPlist.WriteToFile(infoPlistPath);

        // PBXProjectクラスというのを用いてAppTrackingTransparency.frameworkを追加していきます(ステップ3)
        string pbxProjectPath = PBXProject.GetPBXProjectPath(buildPath);
        PBXProject pbxProject = new PBXProject();
        pbxProject.ReadFromFile(pbxProjectPath);
        string targetGuid = pbxProject.GetUnityFrameworkTargetGuid();
        pbxProject.AddFrameworkToProject(targetGuid, "AppTrackingTransparency.framework", true);
        pbxProject.WriteToFile(pbxProjectPath);
    }
}
#endif

 

これでUnityでビルド後、自動的にframeworkの追加とInfo.plistの編集が行われているはずです!

 

 

参考サイト

Google AdMob - iOS14以降に備える

 

-Unity

© 2021 ITime