web-dev-qa-db-ja.com

iPhoneiOSプッシュ通知は本番環境でapnsを送信しません

私はこれにしばらく取り組んできました。私はそこにたくさんの記事があることを知っています、そしてそれについて多くを学びました。

開発用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のものを除いて、これらの証明書がアプリにどのように結びつくかについてのアイデア。]

どんな洞察も大歓迎です。

12
Federico

そのため、何時間にもわたる頭痛の種の後で、SSL .pemファイルを再構築することになり、それは機能しました!!

これが私がしたことです:

  • 配布証明書を消去して新しい証明書を作成しました
  • すべてのプロビジョニングプロファイルを新しい証明書に関連付けました
  • xCodeに新しいプロビジョニングプロファイルをロードしました
  • Raywenderlichの素晴らしいチュートリアル の指示に従ってSSLハンドシェイク.pemファイルを再構築しました

これらは私が最初に開発と生産のために従ったのと同じ指示ですが、多分/明らかに何かを台無しにしました。次に、アドホックバージョンでテストしましたが、機能しました!!!

また、間違った.pemキーを使用すると、APNSからエラーフィードバックを受信しなかったことにも注意してください。上記のリンクにあるsimplepush.phpファイルをベースとして使用してPNを送信します。

8
Federico

開発用と本番用のデバイストークンは同じではありません。

本番環境をテストする場合は、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];
}

このトークンを使用して、本番用のプッシュ通知を送信します。

  • 社内の配布プロファイルは同じtokenIDを提供しますが、このtokenIDはデバイスによって異なります。
  • その他の唯一の問題は、ProductionURLでのみ発生する可能性があります。
  • また、プッシュ通知の受信が遅れることがあることにも気づきました。ほとんどの場合、本番URLで使用した場合です。

お役に立てれば。

1
thatzprem

私の問題はJavaで開発したときも同じですが、本番= trueは本番用、production = falseは開発用であるため解決しました。

ペイロード(ペイロード、キーストア、パスワード、本番、デバイス)

この助けを願っています。

0
Ky Vo