【android】プッシュ通知を実装する 2016年2月時点


androidでプッシュ通知を実装しようと思ったら
以前と作り方が変わっててハマったので
現時点の成功例をメモ。

公式ドキュメントの通りに実装すると全然動かない。。

公式ドキュメントによると

gradleにGooglePlayService用のプラグインを設定して
サイトで生成したgoogle-services.jsonをappディレクトリ直下におく

みたいなことが書いてあるけど
その通りやるとビルドが通らない。

Error:Execution failed for task ':app:processDebugGoogleServices'. >Please fix the version conflict either by updating the version of the google-services plugin (information about the latest version is available at https://bintray.com/android/android-tools/com.google.gms.google-services/) or updating the version of com.google.android.gms to 8.3.0.

こんなんとか。

GoogleService failed to initialize, status: 10, Missing an expected resource: 'R.string.google_app_id' for initializing Google services. Possible causes are missing google-services.json or com.google.gms.google-services gradle plugin.

こんなんとか。。
知らんがな。
んでググることになるんですが

app配下じゃない。app/src配下だ。

とか

gradleに書く依存ライブラリのバージョンを最新にする。

とか、もうカオス。
んで右往左往した結果、正しいか分からないけど
とりあえず動くところまでいきました。

対応策「プラグインをつかわない」

公式ドキュメントではcom.google.gms.google-servicesを使ってますが
これを使うのは諦めて自分で書く事にしました。
といっても差分はstring.xmlgoogle_app_idを追加するだけ。
こんな感じ

<string name="google_app_id" translatable="false">000000000000</string>

google_app_idは
ページによってsenderIDって言われたり
プロジェクト番号って言われたりする
数字のやつです。 (名前を統一してくれ。。)

あとは公式っぽいgithubサンプルコードの通りなんですが
それだとManifestのパーミッションが足りません。
パーミッションは全部でこの3つです。

<permission
        android:name="[アプリのパッケージ名].permission.C2D_MESSAGE"
        android:protectionLevel="signature" />
<uses-permission android:name="[アプリのパッケージ名].permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

たぶん普通はプラグインが補ってくれるんだろうな。
(コード全体はあとでgithubにあげておきます)

以上!

私はココまで来るのに
あ〜でもない
こ〜でもない
っと6時間くらい潰してしまいました。。。

同じ悲しみが広がらないように願います。

ってか公式ドキュメントメンテしろや!!!!!