デバイストークンがサンドボックスなのかディストリビューションなのかを判断する方法はありますか?私たちはテストを行っており、アプリケーションは開発証明書で署名されている場合もあれば、アドホック証明書(配布証明書)で署名されている場合もあります。これは、提供されている100個のアドホックテストデバイスの一部にアプリケーションを渡し、デバイスに開発署名付きアプリを構築しているためです。プッシュ通知を送信するには、適切なプッシュサーバーとpemファイルを選択する必要があるため、プッシュ通知が成功するように、トークンがサンドボックスかディストリビューションかを判断して、適切な方法で通知を送信できると便利です。アプリケーションに署名するために配布プロファイルを使用する必要がある場合があるため、プッシュ通知システムをテストするには、これらの通知を適切に配信する必要があります。
4 に答える
- プロジェクトビルド設定を開く
- 前処理設定に移動
- [プリコンパイル済みヘッダーで使用されないプリプロセッサマクロ](.pchファイルでコードを分岐していないと仮定)で、[リリース]にTOKEN_ENV_SANDBOX = 0を追加し、[デバッグとアドホック]にTOKEN_ENV_SANDBOX=1を追加します。
- コード内でコンパイラ指令を使用する場所
#if!TOKEN_ENV_SANDBOX
NSLog(@ "TOKEN_ENV == PRODUCTION");
#endif#if TOKEN_ENV_SANDBOX
NSLog(@ "TOKEN_ENV == SANDBOX");
#endif
編集:上記の問題を修正しました。
これがAppleが言わなければならないことです
コード署名IDを選択することにより、Xcodeで現在の環境を判別できます。「iPhoneDeveloper:Firstname Lastname」証明書/プロビジョニングプロファイルのペアが表示されている場合は、サンドボックス環境にあります。「iPhoneDistribution:Companyname」証明書/プロビジョニングプロファイルのペアが表示されている場合は、実稼働環境にいます。
AppleLLVM7.0-前処理でターゲットのビルド設定にプリプロセッサマクロを追加します。次に、[デバッグ]の下に次のようなものを追加します。
isRunningInDevModeWithDevProfile=1
次に、.pchで、次のようなことを行うことができます。
// AZ - 01282016 - Determine which environment we are running in for APNS
# ifdef isRunningInDevModeWithDevProfile
# define isAPNSSandbox YES
#else
# define isAPNSSandbox NO
#endif
そして、あなたがあなたのコードでそれをチェックする必要があるところで、あなたはこれをすることができます:
NSString *ifAppIsRunningFromXcodeUsingNonReleaseProfile;
if (isAPNSSandbox) {
ifAppIsRunningFromXcodeUsingNonReleaseProfile = @"dev";
} else {
ifAppIsRunningFromXcodeUsingNonReleaseProfile = @"prod";
}
この値をAPNSサーバーに返し、AppleのAPNSを呼び出すときにどのパスを取るかをサーバーが認識できるようにします。
私がこれを提案する理由は、この場合、非デバッグターゲットでプリプロセッサマクロを未定義のままにしておくと、ビルドしようとしたときにエラーが発生しないためです。
確かに、より良い形式のソリューションがありますが、これはこの機能を起動して実行するためのかなり安全で迅速な方法です。
上記のすべての回答を読みましたが、すべて正しいのですが、「デバイストークンはサンドボックスですか、それとも配布ですか?」という基本的な質問には答えていません。
これは、トークンの品質ではなく、ビルド構成を検出するためです。
この問題の解決に数日を費やした後、私は戦略的解決策にたどり着きました。
実際のApplePushNotificationServerで取得したテストトークン。サーバーと通信するシンプルなアプリを使用することができ、それを構成する必要があります。
私はこのシンプルなアプリ「EasyAPNsProvider」をmacOSなどに使用しました。
https://itunes.apple.com/us/app/easy-apns-provider-push-notification/id989622350?mt=12
macOSアプリでの私の主な問題は、デバッグ構成とリリース構成の両方で本番トークンを取得し続けることでした。
何が問題であったかを検出したら、証明書を無効にして、セキュリティが侵害されないことを100%確認できます。