3

iPhone アプリにプッシュ通知の受信を追加しました。すべてがテスト/サンドボックス環境で機能し、アプリからトークン ID を取得し、サーバーからプッシュ通知を送信できました。

しかし、アプリが承認され、Appstore から出てきたので、空のプッシュ トークン/通知 ID がサーバーに送信されました。すでに 600 以上あります... エンド ユーザーはアプリで通知の受信を承認するポップアップを取得することに注意してください。アプリは承認後に空のトークンをサーバーに送信するだけです。そのため、おそらく空のトークンが APNS サーバーによって配布されます。

次の問題は、これがおそらくアプリ ストアのビルドに使用したプロビジョニング プロファイルに「プッシュ通知」資格がないことが原因であることを示しています: iOS ディストリビューション プロビジョニング プロファイルでプッシュ通知が有効になっているかどうかを確認するにはどうすればよいですか?

エンタイトルメントの欠落は、Apple のプロビジョニング プロタル Web サイトのバグによるものでしたが、次の記事 http://developer.apple.com/library/mac/#documentationに記載されているように、「新しいプロファイルをダウンロードする前に既存のプロファイルを変更してください」 /NetworkingInternet/Conceptual/RemoteNotificationsPG/ProvisioningDevelopment/ProvisioningDevelopment.html

これで、.mobileprovision ファイルに正しい権利が含まれるようになりました。

<key>Entitlements</key>
<dict>
 ..   
 <key>aps-environment</key>
 <string>production</string>
 ..

そのため、アプリを再構築してストアに追加しています。そして、プッシュ通知を受け取ることを望んでいます。

上記が他の人に役立つことを願っています。しかし、ここで私の実際の質問に移ります。ストアから次の更新をインストールするときに、現在のバージョンを既にダウンロードしている 600 人以上のユーザーに対しても、新しいプッシュ トークンの受信を開始しますか? それとも、アプリに初期コードを追加する必要がありますか? registerForRemoteNotifications メソッドは現在、アプリケーションの起動時にのみ呼び出されます。プッシュ トークン ID が空 ('') から実際のトークンに変更された場合にもトリガーされますか? もちろん、新しい AppStore の承認をさらに (短い) 1 週間待ちたくはありませんが、その後になって初めて、一部のユーザーに対してプッシュ通知がまだ機能していないことがわかります。そこの専門家が教えてくれることを願っています。

注: MonoTouch で開発された iPhone アプリを使用し、(古い) APNS-Sharp ライブラリを使用してサーバーから通知を送信していますが、それらの詳細はこの問題に関連しているとは思いません。

4

1 に答える 1

3

これらの 600 人以上のユーザーが次の更新プログラムをインストールしてアプリケーションを再度実行すると、アプリケーションが呼び出さregisterForRemoteNotificationsれ (起動時に呼び出すと言ったため)、空でないデバイス トークンが取得されます (application:didRegisterForRemoteNotificationsWithDeviceToken:呼び出された場合)。Apple はドキュメントで、デバイス トークンが同じままであることが保証されていないため、デバイス トークンのキャッシュされたコピーを使用する代わりに、常に起動時にこのメソッドを呼び出す必要があると述べています。それで問題ないはずです。

APNS docs からの関連する引用は次のとおりです。

アプリケーションは、起動するたびに登録し、そのプロバイダーに現在のトークンを提供する必要があります。registerForRemoteNotificationTypes: メソッドを呼び出して、登録プロセスを開始します。このメソッドのパラメーターは、UIRemoteNotificationType (または、OS X の場合は NSRemoteNotificationType) ビット マスクを受け取ります。このビット マスクは、アプリケーションが受け取りたい通知の初期の種類を指定します。たとえば、アイコン バッジやサウンドなどですが、警告メッセージは受け取りません。iOS では、その後、ユーザーは設定アプリケーションの通知設定で有効な通知タイプを変更できます。iOS と OS X の両方で、enabledRemoteNotificationTypes メソッドを呼び出して、現在有効になっている通知の種類を取得できます。オペレーティング システムはアイコンにバッジを付けず、警告メッセージを表示しません。

これも関連しています:

アプリケーションが起動するたびにデバイス トークンを要求してプロバイダーに渡すことで、プロバイダーがデバイスの最新のトークンを確実に取得できるようになります。ユーザーが、バックアップが作成されたデバイスまたはコンピューター以外のデバイスまたはコンピューターにバックアップを復元する場合 (たとえば、ユーザーがデータを新しいデバイスまたはコンピューターに移行する場合)、アプリケーションを少なくとも 1 回起動して復元する必要があります。再び通知を受け取ります。ユーザーがバックアップ データを新しいデバイスまたはコンピューターに復元するか、オペレーティング システムを再インストールすると、デバイス トークンが変更されます。さらに、デバイス トークンをキャッシュしてプロバイダーに渡さないでください。必要なときはいつでもシステムからトークンを取得してください。アプリケーションが以前に登録されている場合は、registerForRemoteNotificationTypes を呼び出します。

于 2013-03-05T22:34:15.660 に答える