パスブックAPNのサーバー側の実装を作成しようとしていますが、サーバーはデバイスから提供されたプッシュトークンを好みません。トークンをAppleのサンドボックスサーバーに送信すると、「無効なトークン」応答が送信されます。トークンをAppleの本番サーバーに送信すると、リストから削除する必要があるトークンとしてフィードバックサービスにトークンが返されます。少なくとも、APN証明書とサーバーへの接続は正常に機能することを私は知っています。
私のiPhone4sは開発が可能になっています。 APP IDは開発と本番の両方で有効になっており、デバイスはプロビジョニングプロファイルで有効になっています。デバイスから送信される文字列トークンに関して、32バイトのバイナリトークンデータが正しいことを確認しました。
私が持っている1つの質問は、デバイスの通帳がどのトークンを使用するか(開発と本番)をどのように決定するかということです。今はサンドボックス環境を使用したいのですが、「選択」する方法がわかりません。
私はこれについて同様のトピックを見てきましたが、この問題に対する答えを持っている人はいないようです。私はこの作品を作ることにとても近いと感じているので、それは本当にイライラします!アドバイスをよろしくお願いします!
プルダクション証明書を使用してAPN実動サーバーに接続している場合は、実動トークンを使用する必要があります。
サンドボックスサーバーに通知を送信するときに「無効なトークン」を受け取るという事実は、本番サーバーでのみ機能する本番トークンを使用していることを意味します。
トークンを本番サーバーに送信するとフィードバックサービスでトークンが返されるということは、証明書に一致するアプリケーション(サーバーが通知の送信に使用している)がデバイスからアンインストールされるか、プッシュ通知が無効になっていることを意味します。間違った証明書(デバイスからアンインストールされた別のアプリに属する証明書)を使用している可能性があります。
Passbookプッシュの場合、アプリ証明書ではなく、パスタイプID証明書を使用して本番サーバーに接続する必要があります。
すべてのPassbookプッシュは本番サーバーを通過します。サンドボックスを使用する方法はありません。
また、Passbook Pushの場合、Pushペイロードは空である必要があります。送信したものはすべて無視されます。
上記のステートメントをテキスト形式で書き直して、コピーして貼り付けることができるようにします。それは私にとってトリックでした。PushSharp4.0.10は無効な証明書に関するエラーを返していましたが、元の公開鍵と秘密鍵でこれらのコマンドを実行すると問題が解決します。
openssl x509 -in aps.cer -inform DER -out aps.pem -outform PEM
openssl pkcs12 -nocerts -in mykey.p12 -out mykey.pem
openssl pkcs12 -export -inkey mykey.pem -in aps.pem -out iphone.p12