5プラットフォームをサポートしているプッシュ通知SDKをFCMに移行した話
by
Victor Lee
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 1/25 5プラットフォームを 5プラットフォームを サポートしている サポートしている プッシュ通知SDKを プッシュ通知SDKを FCMに移行した話 FCMに移行した話 potatotips#58 @konyavic, 2019/01/28
Slide 2
Slide 2 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 2/25 WHO WHO @konyavic 今はReproでSDK開発をやっている 主にObjc/Java 最近はGoとRubyも始めた SDK開発にUIテストを導入してみた
Slide 3
Slide 3 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 3/25 WHAT WHAT アプリのグロスハックのためのSDK プッシュ通知 / アプリ内メッセージ / ABテスト / アナリティックス / ... 5プラットフォーム対応! iOS, Android Unity, Cocos2d-x, Cordova Webも も始 始めた めた! ! => Repro for Web
Slide 4
Slide 4 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 4/25 4000万 万デバイス デバイス 4000万 万デバイス デバイスで動作 で動作 月 月間 間20億 億個 個プッシュ プッシュ通知 通知 月 月間 間20億 億個 個プッシュ プッシュ通知 通知を配信 を配信
Slide 5
Slide 5 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 5/25 少しでも変更するときはビビる! 少しでも変更するときはビビる!
Slide 6
Slide 6 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 6/25 ところで ところで
Slide 7
Slide 7 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 7/25 プッシュ通知の実装はミスしやすい プッシュ通知の実装はミスしやすい よね? よね?
Slide 8
Slide 8 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 8/25 実装してAPI叩いたのに届かない 実装してAPI叩いたのに届かない SENDER_ID合ってる? google-services.json合ってる? Noti cation Channel作った? Receiver/FirebaseMessagingServiceを登録した? 端末許諾してる?マナーモード? ... 他にも、アイコンが出ない、バッジの数字が違う、タ ップした遷移先が違う、……
Slide 9
Slide 9 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 9/25 SDK開発者としての配慮 SDK開発者としての配慮 実装に必要なステップは極力減らす ドキュメントはシンプルに分かりやすく書く Firebaseのドキュメントを のドキュメントを読 読む むよりも よりも 簡 簡単 単に に実 実装 装できる できる! !
Slide 10
Slide 10 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 10/25 ⚡2018年4月 ⚡ ⚡2018年4月 ⚡
Slide 11
Slide 11 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 11/25 GCM廃止! GCM廃止! 2019年4月までFCMに移行しないと使えなくな る! お客さんの6000アプリ アプリをスムーズに移行させない とReproは死ぬ Migrate a GCM Client App for Android to Firebase Cloud Messaging
Slide 12
Slide 12 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 12/25 REPRO SDKをGCMからFCMに移行 REPRO SDKをGCMからFCMに移行 コード上が変わったのはpush tokenの取得だけ 中身の をリ プレース これで問題ないじゃない?
Slide 13
Slide 13 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 13/25 TOKENの取得メソッドが多すぎ TOKENの取得メソッドが多すぎ => deprecated => なぜか残って る => 推奨されてるけど新しすぎ (>=16.2.0)
Slide 14
Slide 14 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 14/25 互換性を維持できるけど、いつまた使えなくなる か分からない なんで残ってんの? クライアントのアプリがまだそこまでアップデー トできないかもしれない ドキュメントは、初めてプッシュ通知を実装する人 でも失敗しないようにしたいので、複数のやり方を 混ぜて書きたくない
Slide 15
Slide 15 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 15/25 アプリなら悩むことはないけど、 アプリなら悩むことはないけど、 ライブラリーだと悩ましい! ライブラリーだと悩ましい!
Slide 16
Slide 16 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 16/25 結果 結果 でtokenを取得する => 最新のものを使うことで、またすぐに deprecationに心配する必要がない アプリ側でtokenを取得してからSDKに渡すAPIは を維持する => などでも使えるようにしておく
Slide 17
Slide 17 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 17/25 maven repositoryのpomファイルからはFirebaseラ イブラリーへの依存を削除する (GCM時代からやっている) => FCMに依存しない pom.whenConfigured {pom -> pom.dependencies.removeAll(pom.dependencies.findAll {dep -> dep.groupId == 'com.google.android.gms' || dep.groupId == }) }
Slide 18
Slide 18 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 18/25 Firebaseを使う前にre ectionで確認する => バージョンが違ってもクラッシュはしない static void getPushRegistrationId(final Callback callback) { if (!isFirebaseInstanceIdAvailable()) { return; } Task task; try { task = FirebaseInstanceId.getInstance().getInstanceId(); } catch (NoSuchMethodError e) { return; } task.addOnCompleteListener(...) } private static boolean isFirebaseInstanceIdAvailable() { try { Class.forName("com.google.firebase.iid.FirebaseInstanceId } catch (ClassNotFoundException e) { return false; }
Slide 19
Slide 19 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 19/25 return true; }
Slide 20
Slide 20 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 20/25 Native Android SDKは前述の方法で対応 UnityとCocos2d-xは公式のSDKがあるので、token 取得は公式SDKに任せる
Slide 21
Slide 21 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 21/25 CORDOVA CORDOVA 公式のpluginがない… => Repro Cordova Plugin側でtokenを取得する
Slide 22
Slide 22 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 22/25 CORDOVAは非公式のPLUGINも CORDOVAは非公式のPLUGINも 多く使われている 多く使われている phonegap-plugin-push cordova-plugin- rebase => 互換性を考えないといけない
Slide 23
Slide 23 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 23/25 FIREBASEライブラリーの衝突 FIREBASEライブラリーの衝突 => Repro Cordova Pluginの依存バージョンを、 plugin追加時に指定できるようにする
Slide 24
Slide 24 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 24/25 GOOGLE SERVICES GOOGLE SERVICES GRADLE PLUGIN の逆襲 GRADLE PLUGIN の逆襲 異なるpluginでそれぞれのbuild.gradleで実行する と、エラーが出る => Repro Cordova Pluginの で、 しなかったときだけ する if(project.plugins.findPlugin("com.google.gms.google-services") = apply plugin: com.google.gms.googleservices.GoogleServicesPlu }
Slide 25
Slide 25 text
2019/1/28 reveal.js http://localhost:8000/?print-pdf 25/25 まとめ まとめ SDK開発はアプリよりも、あらゆる状況を考える必 要がある Fancyなことをやらない代わりに、いろんな状況を 想定、調査してから実装する そういう開発スタイルが好きな人なら向いてる Cordova Pluginを作るときは他のPluginとの共存を 考えて、行儀よくしよう!