web-dev-qa-db-ja.com

iOS:プロダクションプッシュ通知、APNSサーバーからの無効なトークン

アプリがアプリストアで利用できるようになったので、デバイスにダウンロードしました。開発中、プッシュ通知は正常に機能していました。私はJavaPNSを使用して通知を送信し、Appleの本番サーバーを指すように切り替えました。

ただし、APNSサーバーから無効なトークンエラーが返されます。

Archiveスキームを「Release」に設定し、Releaseをこの配布プロファイルを使用するように設定しています。

enter image description here

そのプロビジョニングファイル内で、環境が正しく設定されていることがわかります。

enter image description here

それでも、まだエラーが発生します。データベースを見ると、アプリから返されるデバイストークンは開発用のものと同じであるため、問題になる可能性があります。しかし、アプリが正しく署名されていることを考えると、なぜ返されるのかわかりません。これは私がテストにも使用したデバイスですが、問題になる可能性がありますか?ここで何が起こっているかについての他のアイデアはありますか?

ありがとう!

編集:私はコードにトークンを保存していません。Eranの答えは、他の可能性はデータベース内の古いトークン、またはプロダクションプロファイルによって署名されていないアプリのみであることを示唆しています。私はデータベースをクリアしているので、前者ではないことを知っています。後者については、配布プロファイルが1つしかないため、どうなるかわかりません。上に示したように、 「aps-environment」キーが正しく設定されています。 XCodeでは、アプリストアの送信に開発プロファイルを使用することさえできませんか?他のいくつかの可能性:

通知で送信しているキーに何か問題があると、「無効なトークン」が発生する可能性がありますか?その場合、既存のプロファイル用にこのキーを再生成できますか?

プッシュ通知のために、AppIDに含まれる別のプロビジョニングプロファイルはありませんか?それに問題があると、無効なトークンエラーが発生する可能性がありますか?

17
James Harpe

プッシュ運用証明書を再ダウンロードし、キーチェーンから.p12としてエクスポートしました。これで問題が解決したようです。悪い秘密鍵が「無効なトークン」エラーを私に与えていたのは奇妙に思えます。

19
James Harpe

本番用のデバイストークンは開発用のものとは異なるため、開発用トークンを本番用APNSサーバー(またはその逆)に送信すると、問題の原因になります。

本番に切り替えたときに、サーバーから開発デバイストークンを削除しなかった可能性があります。

または、プロダクションアプリから開発トークンを取得している場合、アプリはApple to新しいトークンを取得するか、(現在のトークンに対してAppleを要求しても開発トークンを取得する場合)アプリは本番プロビジョニングプロファイルで署名されていません。

17
Eran

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(本番)に変更すると、問題が修正されました:本番プッシュ通知がエラーなしで機能するようになりました。

xCode 8.0

XCode 8.0のインストール後に「無効なトークン」エラーが発生しました。問題はここで見つかりました:Project Navigator->プロジェクト(最上位項目)を選択->ターゲットメニューでプロジェクト名を選択->トップメニューで機能を選択->プッシュ通知セクションを確認->「問題を修正」をクリック enter image description here

2
phantom_2

https://developer.Apple.com/account/ios/identifier/bundle のiOSアプリバンドルIDメニューの下

本番環境の場合はアプリのIDをクリックし、古い証明書の有効期限が切れている場合は新しい証明書を追加します。

アプリバンドルIDを確認してくださいcom.myapp.mycomは証明書名と一致しますcom.myapp.mycom

0
phil

この問題の根本的な原因が見つかりました。これは、秘密キーが不良であるためです。この問題を解決するには、.pemで.p12証明書を生成するだけです。 .pemファイルでp12ファイルを作成するには、以下の方法に従ってください Steps to follow

0
pradeep sg