【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.xmlにgoogle_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時間くらい潰してしまいました。。。
同じ悲しみが広がらないように願います。
ってか公式ドキュメントメンテしろや!!!!!