トラブルシューティング
APNs 環境でプッシュ通知が動作しない場合、以下の点を確認してください。
実際のデバイスでテストしていますか?
APNs を利用するためには、シミュレータではなく実際のデバイスが必要です。デバイスがオンライン状態にあることも確認します。
Kii Cloud のアプリケーションは一致していますか?
テストなどを目的として複数のアプリケーションを Kii Cloud 上に作成している場合は、送信側と受信側で Kii Cloud のアクセスキー(AppID)が一致していることを確認します。送信側と受信側は同じアプリケーションである必要があります。
Apple App ID にワイルドカードが含まれていませんか?
コード署名を手動で設定した場合、Apple Developer Web サイトに登録された App ID にワイルドカードが指定されていないことを確認します。
プッシュ通知を受け取るモバイルアプリでは、App ID にワイルドカードを使用できません。
プッシュの SSL 証明書に正しいパスワードが登録されていますか?
プッシュで使用する P12 証明書は、開発者ポータルで正しく設定されている必要があります。エクスポートしたときとパスワードが一致しない場合でも、開発者ポータルの画面ではエラーにならないため、注意が必要です。
証明書は正しく設定されていますか?
ビルド時にデジタル署名に使用するアプリ証明書と、プッシュ通知に使用する SSL 証明書は異なるファイルです。設定で正しい証明書が指定されていることを確認します。
たとえば、開発者ポータルから PUSH NOTIFICATIONS としてビルド用のアプリ証明書を登録してもエラーは表示されませんが、プッシュ通知は動作しません。
プッシュ通知の開発/配布環境は正しく対応が取れていますか?
対象が開発環境であるか、配布環境であるかの選択は対応が取れている必要があります。以下が目的の環境に合っていることを確認します。
- Apple Developer Web サイトで発行するプッシュ用の SSL 証明書
- Apple Developer Web サイトで発行するデジタル署名用のアプリ証明書
- Apple Developer Web サイトで発行するプロビジョニングプロファイル
- 開発者ポータルに設定したプッシュ用の SSL 証明書とそのパスワード
- Xcode から選択したプロビジョニングプロファイル
- Xcode の Build Configuration が Debug であるか Release であるか
- Kii Cloud のプッシュ通知を初期化する対象環境(デフォルト値として配布環境が設定されている API があるためご注意ください)
- メッセージの送信対象の環境(開発者ポータルから送信する際の設定や、API から送信する際の引数)
モバイルアプリから初期化コードは実行できていますか?
チュートリアルに示す 初期化コード は実装されていますか?また、実行エラーになっていませんか?デバッガやログなどで確認してください。
特に、前者の API を呼び出したとき、「"○○" はあなたにプッシュ通知を送信します。よろしいですか?」というメッセージが表示されること、
didRegisterForRemoteNotificationsWithDevieToken
でデバイストークンらしい文字列が渡されていることを確認します。動作しない場合は、ビルドが適切に行われていない可能性があります。Xcode のコード署名などの設定を確認してください。
Xcode でプッシュ通知の機能は有効にしていますか?
Xcode の "Capabilities" の設定で、プッシュ通知とサイレント通知が、いずれもオンの状態になっていることを確認します。プッシュ通知の設定項目がない場合は、Xcode で使用している開発者のアカウントが正しいことを確認します。
設定方法の詳細は Xcode の設定 を参照してください。
選択したプロビジョニングプロファイルは最新のものですか?
プロビジョニングプロファイルの更新と登録を何回か実行すると、PC 上に複数のプロビジョニングプロファイルが登録されることがあります。このとき、Xcode からプロビジョニングプロファイルを選ぶ画面上に、複数の同名の選択肢が出現するため、最新の項目の選択が困難になります。
トラブルを避けるためには古いプロビジョニングプロファイルを削除する必要があります。削除するには
~/Library/MobileDevice/Provisioning Profiles/
にあるファイルを直接操作します(Preferences のプロビジョニングプロファイル一覧画面から Finder で開くこともできます)。目的のファイルだけ残して削除するのは困難ですが、可能であれば一旦全体を削除してから、必要なファイルだけを登録し直すことをおすすめします。証明書やプロビジョニングプロファイルは有効な状態ですか?
Apple Developer Web サイト で証明書やプロビジョニングプロファイルを確認し、有効期限や状態が無効になっていないことを確認します。
特に、運用中にプッシュ通知が突然動作しなくなったような場合は、証明書が有効期限切れになっている可能性があります。
Bucket やトピックのスコープは一致していますか?
講読したスコープと、プッシュメッセージ送信のトリガーとなったスコープが同じであることを確認します。
Kii Cloud の Push to App を使う場合、Bucket のスコープが一致していることを確認します。また、Push to User を行う場合、トピックのスコープが一致していることを確認します。
たとえば、Kii Cloud SDK for iOS の Push to App で以下の Bucket に対する実装を行うと、1 行目はアプリケーションスコープ、2 行目はユーザースコープのため、プッシュメッセージは届きません。
- 購読対象:
[Kii bucketWithName:@"myBucket"];
- 更新対象:
[user bucketWithName:@"myBucket"];
- 購読対象:
開発者ポータルから送信する場合、メッセージなどを設定していますか?
開発者ポータルからプッシュ通知をテストする際、メッセージ本文(
alert
キー内のbody
キー)に何か文字列を設定すれば通知されることがあります。iOS では、ユーザーインターフェイスや受信ハンドラーに対して、アクションが発生しないプッシュ通知は無視される場合があります。メッセージが通知されるように、ペイロードで、
body
、sound
、badge
、content-available
などのうち、少なくとも 1 つのキーを設定してください。詳細は、受信メソッドの組み合わせ を参照してください。
開発者ログは確認しましたか?
開発者ログ にプッシュ通知関連の情報が記録されている場合があります。
Kii Cloud の API を実行してエラーになった場合、開発者ログにもエラー情報が記録されることがあります。例外処理の抜けなどで API からの例外や戻り値を見落としていても、開発者ログから問題解決のヒントをつかめる場合があります。
たとえば、FCM の場合にペイロードのサイズが 4096 バイトを超えると、API が例外応答すると同時に、以下のようなログが記録されます。
2015-01-21T14:51:16.159+09:00 [ERROR] push.send description:Failed to send Push Message sender: origin:EXPLICIT messageID: type: succeeded-endpoints: failed-endpoints: exception:There are validation errors: payload - The size of the payload exceeds the maximum allowed for GCM messages: 4096 bytes.
通知用のメソッドが直接呼び出されていませんか?
iOS では、モバイルアプリの実行状態や、プッシュメッセージのタグの内容によっては、通知センターにメッセージが表示されず、直接プッシュ通知用のメソッドが呼び出される場合があります。
プッシュ通知の結果として通知センターへの表示を期待している場合、デバイスでプッシュメッセージを受け取っていても受信に気付かないことがあります。通知用のインターフェイスメソッドにログを入れるなどして動作を確認します。
また、プッシュメッセージの alert キーに表示したいメッセージが含まれていることを確認します(Push to App ではカスタマイズできません)。
モバイルアプリの動作状態やプッシュメッセージの内容による動作の相違は、受信メソッドの組み合わせ を参考にしてください。
しばらく様子を見ます。
プッシュ通知の受信まで時間がかかる場合があるため、しばらく様子を見てみます。