fc2ブログ

記事一覧

SKAdNetwork に対応する方法 - iOS14 からの IDFA 取得方法 - | Xamarin.Forms


多くの広告では、アプリが個人の好みに準じた広告(パーソナライズ広告)を表示する為に、広告識別子(IDFA)を利用していましたが、iOS 14 以降ではユーザーに許可を求める必要があり、今回はその対応方法について覚え書きします。



前提条件
・Windows10 Pro 64Bit 1903
・Visual Studio 2019 Community v16.8.1
・Xamarin 16.8.000.255 (NuGet Xamarin.Forms 4.6.0.1141)
・macOS Catalina 10.15.7 / Xcode 12.0 / Xamarin.iOS 14.4.1.3



1.Admobでの表示

2021年2月頃から、Google Admob の管理画面で、以下の様にアプリを更新するようにアナウンスされています。「手順を確認する」ボタンを押下すると一般的な対応方法が書かれていますが、Xamarin に特化されていませんでしたので、当記事で追記したいと思います。

xamarin_ios_idfa_02.png


【手順を確認するURL】
https://support.google.com/admob/answer/9997589?hl=ja
https://developers.google.com/admob/ios/ios14?hl=ja



2.Xamarin.Google.iOS.MobileAds

NuGet パッケージマネージャから Xamarin.Google.iOS.MobileAds を最新版の v7.66.0 に更新します。

xamarin_ios_idfa_03.png



3.Info.plist の実装

以下の様に Info.plist を XML エディタで開いて追加します。
アプリを多言語化している場合は、/Resources/XX.lproj/InfoPlist.string にも NSUserTrackingUsageDescription の内容が必要です。

Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- Google Ads v7.57 対応-->
<key>GADIsAdManagerApp</key>
<true/>
<!-- Google Ads v7.64 対応-->
<key>NSUserTrackingUsageDescription</key>
<string>Please allow the app to use identifiers (IDFAs) to serve personalized ads.</string>
<key>SKAdNetworkItems</key>
<array>
<dict>
<!--Admob-->
<key>SKAdNetworkIdentifier</key>
<string>cstr6suwn9.skadnetwork</string>
</dict>
<dict>
<!--Nend-->
<key>SKAdNetworkIdentifier</key>
<string>eh6m2bh4zr.skadnetwork</string>
</dict>
</array>
</dict>
</plist>

※SKAdNetworkIdentifier の値については、Googleの広告ネットワークIDということで、cstr6suwn9.skadnetwork を置き換える必要はありません。Google 以外の広告を表示する場合は、別途広告ネットワークIDを取得する必要があります。Google 以外の広告ネットワークIDに関しては以下のURLから取得できます。
https://ad-generation.jp/support/adg-help/Implementation-guide/skadnetworkid
複数の広告ネットワークIDを追加したい場合は、<dict>~<dict> を繰り返します。詳しくは 以下のAppleサイトをご参考ください。
https://developer.apple.com/documentation/storekit/skadnetwork/configuring_the_participating_apps



4.IDFAのリクエスト方法

アプリを起動し、広告を表示する前のタイミングで IDFA の取得を許可するようにユーザーに求める必要があります。以下の様に アプリ起動時のコードを埋め込みます。

AppDelegate.cs
using AppTrackingTransparency;
namespace AppName.iOS
{
[Register("AppDelegate")]
public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
global::Xamarin.Forms.Forms.Init();
//this.RequestIDFA();
LoadApplication(new App());
return base.FinishedLaunching(app, options);
}

/// <summary>
/// アプリが再びアクティブになった場合
/// </summary>
/// <param name="uiApplication"></param>
public override void OnActivated(UIApplication uiApplication)
{
base.OnActivated(uiApplication);

//IDFAの使用要求
//iOS15 以降ではOnActivatedイベントで実行しないとダイアログが表示されません
this.RequestIDFA();
}

/// <summary>
/// IDFAの使用要求
/// </summary>
private void RequestIDFA()
{
ATTrackingManager.RequestTrackingAuthorization((status) =>
{
// Tracking authorization completed. Start loading ads here.
// loadAd();
});
}
}
}

※ status には許可されたかどうかを確認できる状態メッセージが入っていました。

iOS14
xamarin_ios_idfa_01.png


AppStore にリリースしてしばらくして、Admob の警告メッセージも消えました。
以上で、SKAdNetwork に対応することができました。

2021/12/07追記
iOS15 では OnActivated イベント内で IDFA の使用要求を行わないと、正しくダイアログが出ないことが分かりました為、iOS15 に対応したソースに修正しました。





最後までお読みいただきありがとうございます。
当ブログの内容をまとめた Xamarin逆引きメニュー は以下のURLからご覧になれます。
https://itblog.dynaspo.com/blog-entry-81.html



関連記事

コメント

コメントの投稿

※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。

 入力されていないコメントには返信しませんのであらかじめご了承くださいませ。

※ニックネームでも良いので必ずご入力ください。

    

※必ずご入力ください。

    
    

※必ずご入力ください。

※技術的な質問には環境やエラーについて正確かつ詳細にお教えください。

・正確なエラーの内容

・Windowsのバージョン番号

・Visual Studioのバージョン

・機器の型番

・アプリやソフトのバージョン

    

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Catalina 10.15 / Mojave 10.14 / High Sierra 10.13 / Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
【データベース】
Oracle 10g/9i
SQLServer 2016/2008R2/2005/2000
SQLAnywhere 16/11/8
【BI/レポートツール】
Cognos ReportNet (IBM)
Microsoft PowerBI
ActiveReport (GrapeCity)
CrystalReport
【OCX関連】
GrapeCity InputMan SPREAD MultiRow GridView
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS jQuery IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。