5プラットフォームをサポートしているプッシュ通知SDKをFCMに移行した話
by
Victor Lee
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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との共存を 考えて、行儀よくしよう!