私はこれにしばらく取り組んできました。私はそこにたくさんの記事があることを知っています、そしてそれについて多くを学びました。
開発用SSLと本番用SSLを同じ方法で作成しました。開発はssl://gateway.sandbox.Push.Apple.com:2195に接続します本番はssl://gateway.Push.Apple.com:2195に接続します接続は正常に機能しているようです。
アプリも。開発:xCodeからデバイスに直接実行すると、開発バージョンが実行されます。アプリは開発トークンをデータベースに正常に記録します。次に、サービスを実行してプッシュ通知を送信すると、正しく配信されます。メッセージは正常に配信されます。
アドホック:アーカイブを作成してアドホック配布用にエクスポートするときは、パッケージの内容を再確認しますcodesign -dvvvv --entitlements - Elepago.app
そして、aps-environmentが本番環境に正しく設定されていることを確認します。パッケージ化して、iTunesからデバイスにロードします。アプリを起動すると、データベースに記録された新しい本番トークンが表示されます。したがって、環境を正しく設定する必要があります。プッシュ通知を本番キー(開発と同じですが、SSL .pemキーとサーバーを変更するだけです)に送信すると、正常に配信されたと表示されます。ただし、実際にデバイスに到達することはありません!!!
この問題は私を夢中にさせています。配布証明書を調べてクリーンアップし、まったく新しいCSRを使用して再構築しました。また、その新しい証明書を使用するようにすべてのプロビジョニングプロファイルを更新しました。 [私がすでにチェックしているaps-environmentのものを除いて、これらの証明書がアプリにどのように結びつくかについてのアイデア。]
どんな洞察も大歓迎です。
そのため、何時間にもわたる頭痛の種の後で、SSL .pemファイルを再構築することになり、それは機能しました!!
これが私がしたことです:
これらは私が最初に開発と生産のために従ったのと同じ指示ですが、多分/明らかに何かを台無しにしました。次に、アドホックバージョンでテストしましたが、機能しました!!!
また、間違った.pemキーを使用すると、APNSからエラーフィードバックを受信しなかったことにも注意してください。上記のリンクにあるsimplepush.phpファイルをベースとして使用してPNを送信します。
開発用と本番用のデバイストークンは同じではありません。
本番環境をテストする場合は、UIAlertViewを使用して本番環境のトークンを確認してください。次のようなことを行います。
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
NSString *deviceID = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
deviceID = [deviceID stringByReplacingOccurrencesOfString:@" " withString:@""];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Device Token", nil) message:deviceID delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", nil) otherButtonTitles:nil];
[alert show];
}
このトークンを使用して、本番用のプッシュ通知を送信します。
お役に立てれば。
私の問題はJavaで開発したときも同じですが、本番= trueは本番用、production = falseは開発用であるため解決しました。
ペイロード(ペイロード、キーストア、パスワード、本番、デバイス)
この助けを願っています。