GCM によるプッシュ通知
GCM 環境でプッシュ通知が動作しない場合、以下の点を確認してください。
プッシュの利用要件を満たしていますか?
GCM を利用するには、Android 2.3 以降で Google API サポートありのエミュレータや、Android 3.0 以前のデバイスでの Google アカウントとの紐付けなど、実行のための要件があります。詳しくは、Google のドキュメント の冒頭部分にある対象環境をご覧ください。
Kii Cloud のアプリケーションは一致していますか?
テストなどを目的として複数のアプリケーションを Kii Cloud 上に作成している場合は、送信側と受信側で Kii Cloud のアクセスキー(AppID)が一致していることを確認します。送信側と受信側は同じアプリケーションである必要があります。
GCM の API キーは正しく発行されていますか?
チュートリアル に記載の手順に従って API キーを発行し、開発者ポータルに登録できていることを確認します。
Google Developers Console からもキーを生成できますが、Kii Cloud で使用できないキーが生成されることがあるため、おすすめできません。たとえば、Android Key ボタンで作成されたキーはデバイスで使用するためのものであるため、Kii Cloud では動作しません。また、キーにサーバーの IP アドレスが指定されていると動作しないことがあります。
Google API コンソールで Google Cloud Messaging for Android を有効にしていますか?
Google Cloud Messaging for Android をオンにする前にサーバーキーを作成して、Kii Cloud の開発者ポータルで登録すると、"Unable to validate GCM key" というメッセージが表示されてエラーになります。この場合は Google Cloud Messaging for Android をオンにしてから、API キーをもう一度作成し、Kii Cloud に登録してください。
開発者ポータルに API キーは設定済みですか?
Google API コンソールで API キーを取得し、開発者ポータルの設定画面で登録します。
Google Play services プロジェクトはモバイルアプリに組み込まれていますか?
モバイルアプリのプロジェクトには、Google Play services プロジェクトを組み込んで、ライブラリとして使用できる必要があります。
Android SDK Manager で Google Play services をインストールし、プロジェクトにリンクさせます。
また、コンソールやログ画面にエラーが出力されていないことを確認します。ライブラリの設定方法によっては正しく読み込めていない場合があります。
AndroidManifest.xml で必要な項目は追加済みですか?
AndroidManifest.xml を 設定例 に従って変更していることを確認してください。また、定義した XML の階層が正しいことや、パッケージ部分がモバイルアプリのパッケージ名と一致するように変更されていることを確認してください。
プッシュ通知の開発/配布環境は正しく対応が取れていますか?
対象が開発環境であるか、配布環境であるかの選択は対応が取れている必要があります。以下が目的の環境に合っていることを確認します。
- Kii Cloud のプッシュ通知を初期化する対象環境(デフォルト値として配布環境が設定されている API があるためご注意ください)
- メッセージの送信対象の環境(開発者ポータルから送信する際の設定や、API から送信する際の引数)
モバイルアプリのプロジェクトに GcmListenerService のサブクラスは組み込まれていますか?
GcmListenerService のサブクラスがプロジェクトに組み込まれ、AndroidManifest.xml の <serivce> タグにある android:name に設定されていることを確認します。
ログイン状態でデバイスのインストール処理を実行していますか?
KiiUser がログインしている状態で
KiiUser.pushInstallation().install()
メソッドを呼び出す必要があります。もし実行していない場合は、コード例 のような初期化処理を実行してください。コード例をそのまま使用する場合は、テストユーザーのユーザー名とパスワードも同様に確認してください。
初期化処理がエラーになっていませんか?
初期化処理の動作をデバッガ等で確認し、初期化処理の各メソッドがエラーを返していないことを確認します。
実際に最後まで実行が成功しており、デバイストークンらしい文字列が取得できていることを確認します。
ハンドラーが呼び出されていることを確認していますか?
GCM でプッシュメッセージを受け取った際、画面操作の実装を行わない限り、画面には何も表示されません。デバッガのブレークポイントなどでハンドラーの動きを確認してください。
Bucket やトピックのスコープは一致していますか?
講読したスコープと、プッシュメッセージ送信のトリガーとなったスコープが同じであることを確認します。
Kii Cloud の Push to App を使う場合、Bucket のスコープが一致していることを確認します。また、Push to User を行う場合、トピックのスコープが一致していることを確認します。
たとえば、Kii Cloud SDK for Android の Push to App で以下の Bucket に対する実装を行うと、1 行目はアプリケーションスコープ、2 行目はユーザースコープのため、プッシュメッセージは届きません。
- 購読対象:
Kii.bucket("myBucket");
- 更新対象:
user.bucket("myBucket");
- 購読対象:
開発者ログは確認しましたか?
開発者ログ にプッシュ通知関連の情報が記録されている場合があります。
Kii Cloud の API を実行してエラーになった場合、開発者ログにもエラー情報が記録されることがあります。例外処理の抜けなどで API からの例外や戻り値を見落としていても、開発者ログから問題解決のヒントをつかめる場合があります。
たとえば、GCM に送信する場合にペイロードのサイズが 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.
collapse_key が設定されていませんか?
GCM で、複数回のプッシュメッセージを送信したのに、メッセージがまとめて 1 回しか届かない場合は collapse_key が設定されている可能性があります。collapse_key の詳細は、Google による解説 を参照してください。
Android 8.0 以降だけで発生する問題ですか?
Android 8.0 以降だけでプッシュメッセージがステータスバーに表示されない場合、モバイルアプリから通知チャンネルを設定していないことが原因である可能性があります。詳細は ステータスバーへの表示 を参照してください。
通知チャンネルが設定されていない場合、ステータスバーにメッセージが表示されませんが、プッシュ通知そのものはプログラムに届いています。