LoginSignup
2
3

More than 3 years have passed since last update.

SwiftUI 2.0: iOSデバイスをadMobのテストデバイスとしてプログラムで設定する方法

Last updated at Posted at 2021-04-21

課題

iOSアプリケーションをテストする時にGoogle AdMobの無効なトラフィックポリシーに違反しないようにするには、デモ広告またはテストデバイスを使用して、実装コードの動作を確認します。

実装コードの動作を確認するもう1つの方法は、iOSアプリの起動時にiOSデバイスをadMobのテストデバイスとしてプログラムで設定することです...

Google AdMobのテストモードを有効にする

デモ広告ユニット

アプリに表示する広告フォーマットに対応するデモ広告ユニットIDを使用します。

たとえば、バナー広告の場合、デモ広告ユニットリストにあるIDは ca-app-pub-3940256099942544/2934735716です。

Google AdMobの管理画面でテストデバイスを追加する

デバイステストモードを自動的に有効にするには、Google AdMobの管理画面を使用することもできます。.

  • 左側のメニューで、設定を選択します。
  • 次に、ページ上部のテストデバイスタブを選択します。
  • テストデバイスを追加ボタンをクリックします。
  • 最後に、フォームに入力して保存をクリックして、デバイスをリストに追加します。

※ このデバイスをテストデバイスリストに追加するには、デバイスのIDFAが必要です。

プログラムでテストデバイスを追加する

デバイスのIDFAがわからない場合があります。この場合、プログラムでデバイステストモードを有効にすることは便利な方法です。

デバイスまたはデバイスのリストをテストデバイスとして設定するには、次の手順に従います。

  • まず、 GADMobileAds.sharedInstance()を使用してGoogle Mobile AdsSDK設定の共有インスタンスを取得します。
  • 次に、 .requestConfigurationを使用してすべてのリクエストに共通のリクエスト設定を取得します。
  • 最後に、テストモードで使用されるデバイスのIDリストtestDeviceIdentifiersのなかにテストデバイスに対応するIDリストを組み込みます。

例えば:

Swift
import GoogleMobileAds
...
GADMobileAds.sharedInstance().requestConfiguration.testDeviceIdentifiers =
    [ "2077ef9a63d2b398840261c8221a0c9b" ] // Sample device ID

※ 最初の広告リクエスト時に、現在のデバイスのテストデバイスIDがコンソールに表示されます。

では、テストデバイスIDを取得する方法は?

テストデバイスIDFAを取得する

IDFAは、iOSによって発行されたデバイスの広告用IDであり、広告主がデバイスを識別するために使用します。

デバイスIDFAを取得するには:

  • まず、 ASIdentifierManager.shared()を使用して、広告IDを含むオブジェクトの共有インスタンスを取得します。
  • 次に、 .advertisingIdentifierで広告IDを取得します。
  • 最後に、 .uuidStringの広告IDのUUID文字列を取得します

例えば:

Swift
import AdSupport
...
var idfa: String = ASIdentifierManager.shared().advertisingIdentifier.uuidString

ご覧のとおり、 EA7583CD-A667-48BC-B806-42ECB2B48606のようなサンプルIDFAのUUID文字列形式は、以前に使用したサンプルデバイスID2077ef9a63d2b398840261c8221a0c9bの形式とは異なります。 IDFAを変換する必要があります。

IDFAをテストデバイスIDに変換する

Google AdMobで使用されるテストデバイスIDは、取得したIDFAのUUID文字列のmd5ハッシュにすぎないことが分かりました。

Swift
import CryptoKit
...
var deviceId: String = Insecure.MD5.hash(
                           data: idfa.data(using: .utf8)!
                       )
                       .map { String(format: "%02hhx", $0) }
                       .joined()

次に、取得したデバイスID文字列をtestDeviceIdentifiersで使用して、現在のデバイスのテストモードを有効にすることができます。

サンプルコード

MyApp.swift
import SwiftUI
import AdSupport
import CryptoKit
import GoogleMobileAds

@main
struct MyApp: App {
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

    let persistenceController = PersistenceController.shared

    var body: some Scene {
        WindowGroup {
            MyAppView()
                .environment(\.managedObjectContext, persistenceController.container.viewContext)
        }
    }
}

class AppDelegate: NSObject, UIApplicationDelegate {

  func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GADMobileAds.sharedInstance().start(completionHandler: nil)
    GADMobileAds.sharedInstance().requestConfiguration.testDeviceIdentifiers = [  
      Insecure.MD5.hash(
        data: ASIdentifierManager.shared().advertisingIdentifier.uuidString.data(using: .utf8)!
      )
      .map { String(format: "%02hhx", $0) }
      .joined() 
    ];
    return true
  }
}

最後に

アプリをリリースする前に、テストモードを有効にするコードを削除することを忘れないでください!

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3