アプリがアプリストアで利用できるようになったので、デバイスにダウンロードしました。開発中、プッシュ通知は正常に機能していました。私はJavaPNSを使用して通知を送信し、Appleの本番サーバーを指すように切り替えました。
ただし、APNSサーバーから無効なトークンエラーが返されます。
Archiveスキームを「Release」に設定し、Releaseをこの配布プロファイルを使用するように設定しています。
そのプロビジョニングファイル内で、環境が正しく設定されていることがわかります。
それでも、まだエラーが発生します。データベースを見ると、アプリから返されるデバイストークンは開発用のものと同じであるため、問題になる可能性があります。しかし、アプリが正しく署名されていることを考えると、なぜ返されるのかわかりません。これは私がテストにも使用したデバイスですが、問題になる可能性がありますか?ここで何が起こっているかについての他のアイデアはありますか?
ありがとう!
編集:私はコードにトークンを保存していません。Eranの答えは、他の可能性はデータベース内の古いトークン、またはプロダクションプロファイルによって署名されていないアプリのみであることを示唆しています。私はデータベースをクリアしているので、前者ではないことを知っています。後者については、配布プロファイルが1つしかないため、どうなるかわかりません。上に示したように、 「aps-environment」キーが正しく設定されています。 XCodeでは、アプリストアの送信に開発プロファイルを使用することさえできませんか?他のいくつかの可能性:
通知で送信しているキーに何か問題があると、「無効なトークン」が発生する可能性がありますか?その場合、既存のプロファイル用にこのキーを再生成できますか?
プッシュ通知のために、AppIDに含まれる別のプロビジョニングプロファイルはありませんか?それに問題があると、無効なトークンエラーが発生する可能性がありますか?
プッシュ運用証明書を再ダウンロードし、キーチェーンから.p12としてエクスポートしました。これで問題が解決したようです。悪い秘密鍵が「無効なトークン」エラーを私に与えていたのは奇妙に思えます。
本番用のデバイストークンは開発用のものとは異なるため、開発用トークンを本番用APNSサーバー(またはその逆)に送信すると、問題の原因になります。
本番に切り替えたときに、サーバーから開発デバイストークンを削除しなかった可能性があります。
または、プロダクションアプリから開発トークンを取得している場合、アプリはApple to新しいトークンを取得するか、(現在のトークンに対してAppleを要求しても開発トークンを取得する場合)アプリは本番プロビジョニングプロファイルで署名されていません。
MyAppは、ログオン時に各MyAppによって更新され続けるデータベースから取得したAPNトークンIDを使用して、プッシュ通知MyApp-to-MyAppを送受信するiOSアプリです。プッシュ通知は、MyAppがNWPusherフレームワークAPIを使用して送信します。
プロジェクトが開発者(デバッグ)モードで実行されている限り、プッシュ通知の送受信は完全に機能しました。ただし、実稼働モードでは、プッシュ通知の送信は機能しません。
私は戻って、AppID、SSL証明書、プロビジョニングなどを完全に再作成しましたが、役に立ちませんでした。次に、NWPusher MacOS Pusherアプリを使用して、プッシュ通知をMyAppに送信する実験を行いました。 Pusherを設定して、プッシュ通知をMyAppの実稼働SSL証明書で(Ad Hoc配布のtokenIDに)送信します、およびPusherログに次のメッセージを受け取りました: "通知エラー:APN無効なトークン"。
次に、Pusherにチェックボックスオプション "sandbox環境を使用する必要があります"がチェックされていることに気付きました。オプションのチェックを外して、もう一度試しました。今回は、プッシュ通知が送信され、エラーなしでターゲットの電話で受信されました。これにより、NWPusher.connect呼び出しをもう一度見ることになりました。
迅速:
let pusher:NWPusher? = try? NWPusher.connect(withPKCS12Data: pkcs12! as Data, password:APNS_Certificate_Password,environment:NWEnvironment(rawValue:1)!)
可能な値0 = none、1 = sandbox、2 = production、3 = autoの環境引数NWEnvironment列挙があります。
RawValue:1(サンドボックスの開発)をrawValue:2(本番)に変更すると、問題が修正されました:本番プッシュ通知がエラーなしで機能するようになりました。
https://developer.Apple.com/account/ios/identifier/bundle のiOSアプリバンドルIDメニューの下
本番環境の場合はアプリのIDをクリックし、古い証明書の有効期限が切れている場合は新しい証明書を追加します。
アプリバンドルIDを確認してくださいcom.myapp.mycom
は証明書名と一致しますcom.myapp.mycom