##rejectされた理由##
admobの広告を追加したところ、トラッキングの許可ダイアログ(AppTrackingTransparency)を出す必要性があるとのこと。
##注意点、ハマったこと##
・ios15だとアプリがアクティブなとき(UIApplicationStateActive)にのみAppTrackingTransparencyの許可ダイアログが出る。
・applicationDidBecomeActiveが呼び出されない…と思ったら、SceneDelegateファイルがあるのでsceneDidBecomeActiveに書かないといけない
##コード##
(最終的に審査に通ったコードは一番最後です)
最初はAppDelegateのdidFinishLaunchingWithOptionsに全部書いた。自分の実機のios14までは動いたが(xcodeアップデートしてなかった)iOS15だと動かないよとrejectされた…😞
そこで以下のようにしてみた。(SceneDelegate使ってないならOKかも)
class AppDelegate: UIResponder, UIApplicationDelegate {
~省略~
func applicationDidBecomeActive(_ application: UIApplication) {
if #available(iOS 14, *) {
if ATTrackingManager.trackingAuthorizationStatus == .notDetermined {
ATTrackingManager.requestTrackingAuthorization(completionHandler:{
status in
GADMobileAds.sharedInstance().start(completionHandler: nil)
})
}
} else {
// Fallback on earlier versions
GADMobileAds.sharedInstance().start(completionHandler: nil)
}
}
}
それでも出ない…🙃
調べたらSceneDelegate使ってたらapplicationDidBecomeActiveとか使えないよって公式ドキュメントに書いてあった、、
https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1622956-applicationdidbecomeactive
importantのとこ。
わからなくなったら英語だけど公式ドキュメント読めということですね、、
それでsceneDidBecomeActiveに書いてみた
しかし表示されない!!!!👼
調べた結果、、、0.5秒遅らせたら普通に出た😇
func sceneDidBecomeActive(_ scene: UIScene) {
// Initialize the Google Mobile Ads SDK.
DispatchQueue.main.asyncAfter(deadline: .now()+0.5) {
if #available(iOS 14, *) {
if ATTrackingManager.trackingAuthorizationStatus == .notDetermined {
ATTrackingManager.requestTrackingAuthorization(completionHandler: {
status in
GADMobileAds.sharedInstance().start(completionHandler: nil)
})
}
} else {
// Fallback on earlier versions
GADMobileAds.sharedInstance().start(completionHandler: nil)
}
}
}