24

私たちは完全に立ち往生しています、助けてください。

私と私のチームはiPhoneアプリケーションを作成しましたが、iOSで試すのはこれが初めてです。

アプリを送信してアプリストアで利用できるようになるまでは、すべて問題ありません。プッシュ通知サービスは機能していません。ウェブを検索して、人々のアドバイスでアプリを再確認してみましたが、何が問題なのかわかりませんでした。したがって、この質問はここに投稿されます。

これらは私たちがしたことです:

  1. 「AppMaster」という名前のアプリケーションを作成します。

  2. iOSプロビジョニングポータルで「pushtest」という名前のAppIdを作成しました。このIDにより、開発と本番の両方でプッシュ通知が有効になりました。

  3. 上記のappIdから「AppMasterPushTest」という名前の開発用プロビジョニングを作成しました。このプロビジョニングは内部テスト用であり、チーム全員が自分のMacにインストールしました。

  4. サーバーはJavaで実装されており、java-apnパッケージを使用しました。テスト中に、開発用の認証ファイルをダウンロードして.p12ファイルを書き出し、パッケージのapi --withSandboxDestination()とその.p12ファイルを使用して、メッセージを「サンドボックス」サーバーにプッシュしました。テストは正常に進み、通知が受信されます。

  5. 準備ができていると思ったので、「AppMaster」という別のAppIdを作成し、本番環境でのみプッシュ通知を有効にしました。このIDは、アプリのバンドル識別子に書き込まれます。

  6. 手順5で、AppIdから「appMaster」という名前の本番用の別のプロビジョニングを作成しました。配布方法は「AppStore」に設定されています。ダウンロードしてアプリを再構築します。これはアップルに提出され、app-stroeで生きています。

  7. サーバー側、本番用の証明書をダウンロードし、.p12ファイルを再度書き出します。そして、api --withProductionDestination()を使用して、メッセージを本番サーバーにプッシュするプログラムを作成しました。.p12は書き出されたばかりです。

  8. AppStoreからアプリをインストールしました。残念ながら、通知は配信されませんでした。

見逃したことはありますか?ところで、手順5で作成したIDは「XXX.com.company.appname」のように見えますが、アプリのバンドルIDには、プレフィックスなしで「com.company.appname」の部分を設定するだけです。これが問題になる可能性がありますか?

どんなアイデアでも大歓迎です。

私たちの救い主になってください。ありがとう。

4

1 に答える 1

30

上記のコメントは正しくありません。アプリIDには、バンドルIDの前にプレフィックスがあります。

アプリケーションIDは、Appleによって生成された10文字のコードがプレフィックスとして付けられたアプリケーションのバンドルIDで構成されます。チーム管理者はバンドルIDを入力する必要があります。証明書の場合、特定のバンドルIDを組み込む必要があります。「ワイルドカード」アプリケーションIDは使用できません。

プロビジョニングプロファイルをチェックして、正しいaps資格が含まれていることを確認する必要があります。

プロビジョニングプロファイルファイルのエンタイトルメントが正しいことを確認します。これを行うには、テキストエディタで.mobileprovisionファイルを開きます。ファイルの内容はXMLで構造化されています。エンタイトルメントディクショナリで、aps-environmentキーを見つけます。開発プロビジョニングプロファイルの場合、このキーの文字列値は開発である必要があります。ディストリビューションプロビジョニングプロファイルの場合、文字列値はproductionである必要があります。

プッシュ通知を本番APNSサーバーに送信するときは、本番デバイストークンを使用していることを確認する必要があります(サンドボックス環境で機能するデバイストークンは本番環境では機能しません)。

アプリをアプリストアにリリースする前に、AdHocプロビジョニングプロファイルを使用してアプリをテストしておく必要があります。AdHocプロファイルは、本番プッシュ環境で機能します。

編集 :

デバイストークンに関するいくつかの引用:

ローカルおよびプッシュ通知プログラミングガイドから:

本番環境のデバイストークンと開発(サンドボックス)環境のデバイストークンは同じ値ではないことに注意してください。

テクニカルノートTN2265から:

不正な通知の処理

プッシュサービスが何らかの方法で正しくない通知を受信した場合、単純なバイナリインターフェイスは接続をドロップします。プロバイダーは、通知の送信に応答して、これをEPIPEまたは破損したパイプエラーと見なす場合があります。一方、拡張バイナリインターフェイスは、接続を切断する前に、通知の何が問題であったかに関するより詳細な情報を含むエラー応答を送信します。プロバイダーがこれらの条件を適切にキャッチして処理することを確認してください。

最も一般的な問題は、無効なデバイストークンです。社内で開発ビルドをテストしている場合など、トークンがサンドボックス環境からのものである場合、それを本番プッシュサービスに送信することはできません。各プッシュ環境は、同じデバイスまたはコンピューターに対して異なるトークンを発行します。デバイストークンを間違った環境に送信すると、プッシュサービスはそれを無効なトークンと見なし、通知を破棄します。

最後に、この記事では、一部の通知が無効な場合(最も一般的な原因は無効なデバイストークン)に複数の通知をAppleに送信すると、有効な通知の一部も到着しない可能性があることについて説明しています。

于 2013-03-24T17:18:15.713 に答える