APNs通信には3つのステップがあります。
- アプリは、iOS内のappDelegateでAPNを受信するように登録します。これにより、通知の送信に使用する必要のあるdeviceTokenが提供されます。
- アプリはdeviceTokenを管理サーバーに送信します
- 管理サーバーはAppleAPNsサーバーに接続して、プッシュ通知を送信します
あなたの場合、問題はステップ1にあると理解しています。これは、デバイスIDがnullであり、アプリがAPNの許可について尋ねていないためです。したがって、サーバー証明書を変更したり、gateway.sandbox.push.apple.comからgateway.push.apple.comに切り替えたりしても、エラーが以前に発生したため、役に立ちません。
これは明らかに証明書の問題です。AppleiOSプロビジョニングポータルで必要なすべての手順を実行したことを確認する必要があります。
- アプリのバンドル識別子を使用してAppIdを作成します。*などのワイルドカーは避けてください。
- アプリのInAppPurchaseオプションを構成します(通信のステップ3で使用されるため、これは問題ではありません)
- 1.で使用したAppIdを使用するDistributionのプロビジョニングプロファイルを作成し(これが問題である可能性があります)、ダウンロードします
- XCodeプロジェクト設定を開き、アーカイブ操作で3にダウンロードされた正しいプロファイルが使用されていることを確認します。オーガナイザーが要求したときに正しいプロファイルを選択していることを確認してください。(前の手順で問題がなかった場合、これは間違いなく問題なので、2回または3回確認してください)。
AppStoreに再度送信する前に、バイナリが正しいプロファイルで生成されたことを確認する場合は、次の手順を実行します。
- Finderでバイナリを開きます(まず、Library / Developer / XCode / Archives / ...でアーカイブを開き、右クリックして[パッケージの内容を表示]をクリックし、/ Products / Applications / youAppに移動して、パッケージの内容をもう一度表示します)、
- Embedded.mobileprovisionファイルを探し、テキストエディタで開きます
- バイナリコンテンツの中で、「application-identifier」と「aps-environment」と呼ばれるいくつかのフィールドをローカライズできるはずです。それらが正しい値を持っていることを確認してください。
以前にアーカイブしたアプリを確認すると、間違ったプロファイルが表示されることは間違いありません。これが、アプリがdeviceTokenを返さない唯一の原因です。(受信してもサーバーに正しく送信されない場合を除き、上記の通信のステップ2で問題が発生します)。