anz blog

トラッキング許可ダイアログが他アプリ実行中にでちゃうのをちょっと検証してみた

2021-06-03 #Swift #ATT

あまりにも気になったので、推測がちゃんと実現されるのかっていうので遊んでみた話です。

意図せぬトラッキング許可ダイアログの表示

Twitterアプリを起動してツイートのテキスト文を編集しているときに、トラッキング許可ダイアログが表示されました。
テキスト入力中という変なタイミングで表示されるなと思ったけれど、よくよく見ていると Twitter とは全然関係のないアプリの許可ダイアログだったのです。

あ、、、あれ?ってなりますよね(笑)
ツイートにも書いてはあるけれど、この直前というか何日も許可をリクエストしてきたアプリは触っていません。
にもかかわらずダイアログを出してたという感じ、疑問に思ったのです。

@ch3cooh さんがツイートに返信で「サイレントプッシュ」で起こされたのでは?という説を示してくれました。

たしかに。ありえそうですよね。対象のアプリの役割としても、裏で最新の情報に更新するのというのはさもありなんという感じですし。
ここでふときになったのが、裏で起きたからと言って出ちゃうものなの??という疑問です。

検証してみた

疑問を解消するためには 遊んで 検証してみるしかありません。
かといってそのためにサイレントプッシュをやるのは面倒臭すぎるので、バックグラウンドで呼び出してみることにしました。

ということで、BGAppRefreshTaskRequest を利用して、呼び起こしてもらってその中で ATTrackingManager を使ってダイアログをリクエストしてみようと。
やることをコードにするとこういう感じです。

final class TestTaskOperation: Operation {
    override func main() {
        ATTrackingManager.requestTrackingAuthorization { status in
            print(status)
        }
    }
}

なんのことはないものです。
これを、func sceneDidEnterBackground(_ scene: UIScene) のタイミングで BGAppRefreshTaskRequest をスケジューリングさせてみるという検証です。

ちなみに検証の環境はこうです。

  • Xcode v12.5
  • iPadOS v14.6

結果

検証してみた結果がこれです。

許可ダイアログを裏から呼べるのかという検証結果

無事に(?)トラッキング許可ダイアログが表示されました!
ちゃんと許可をすると有効になっていました。
ということで、意図しているのかしていないのか(いや、多分していないと思うけど)、裏で呼び出した説が濃厚になりました。
この感じだとプッシュ通知の許可も出せそうですかね...🤔

まぁ、裏で呼んだからって表示するのはどうなの?感が強いので、そのうち iOS バージョンアップとかで修正されるのでは?と思いますが。

参考