Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
5プラットフォームをサポートしているプッシュ通知SDKをFCMに移行した話
Search
Victor Lee
January 28, 2019
Programming
1.3k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
5プラットフォームをサポートしているプッシュ通知SDKをFCMに移行した話
Victor Lee
January 28, 2019
More Decks by Victor Lee
See All by Victor Lee
Create Flutter Plugins
konyavic
2
2.6k
ライブラリーだってクラッシュレポートが見たい
konyavic
0
600
Background Execution LimitsのAndroid Pの変更点?
konyavic
0
580
Spoonを使わずにテストケースでスクショを撮りたい
konyavic
0
300
SDK開発にUIテストを導入してみた
konyavic
1
2.4k
Other Decks in Programming
See All in Programming
学びを記事・スライド・Xへ高速展開する― AI-assisted Learning Loopで回すコンテンツ生成術
ochtum
0
200
クラウドゲーミングのパフォーマンス最適化に挑む / Cloud Gaming Performance Tuning
vivion
0
330
高橋メソッドでCVE解説シリーズ 〜CVE-2026-112816〜
hakkadaikon
0
240
AI Augmentation Techniques with Liberty
ivargrimstad
1
420
flutter_test のその先へ — Flutter アプリの LLM 機能に「評価」という品質保証を
kosukesaigusa
0
200
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
740
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.8k
作れるエンジニアから、価値を届けるエンジニアへ
ryunakayama
1
250
あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期
hasutosasaki
1
2.3k
Web3Dライブラリを作ってVue Custom Rendererの仕組みを理解しよう / lets learn vue custom renderer by making 3d library
drumath2237
1
130
AIが実装を担う時代の「技術設計」と「チームマネジメント」
kamina_zzz
2
250
AI時代のFlutter品質設計 — アプリ品質を守るQuality Layers
omatty198
0
370
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1.1k
Prompt Engineering for Job Search
mfonobong
0
580
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
660
Mind Mapping
helmedeiros
1
430
WENDY [Excerpt]
tessaabrams
14
40k
Being A Developer After 40
akosma
PRO
92
590k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.5k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Embracing the Ebb and Flow
colly
88
5.2k
Transcript
2019/1/28 reveal.js http://localhost:8000/?print-pdf 1/25 5プラットフォームを 5プラットフォームを サポートしている サポートしている プッシュ通知SDKを プッシュ通知SDKを
FCMに移行した話 FCMに移行した話 potatotips#58 @konyavic, 2019/01/28
2019/1/28 reveal.js http://localhost:8000/?print-pdf 2/25 WHO WHO @konyavic 今はReproでSDK開発をやっている 主にObjc/Java 最近はGoとRubyも始めた
SDK開発にUIテストを導入してみた
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
2019/1/28 reveal.js http://localhost:8000/?print-pdf 4/25 4000万 万デバイス デバイス 4000万 万デバイス デバイスで動作
で動作 月 月間 間20億 億個 個プッシュ プッシュ通知 通知 月 月間 間20億 億個 個プッシュ プッシュ通知 通知を配信 を配信
2019/1/28 reveal.js http://localhost:8000/?print-pdf 5/25 少しでも変更するときはビビる! 少しでも変更するときはビビる!
2019/1/28 reveal.js http://localhost:8000/?print-pdf 6/25 ところで ところで
2019/1/28 reveal.js http://localhost:8000/?print-pdf 7/25 プッシュ通知の実装はミスしやすい プッシュ通知の実装はミスしやすい よね? よね?
2019/1/28 reveal.js http://localhost:8000/?print-pdf 8/25 実装してAPI叩いたのに届かない 実装してAPI叩いたのに届かない SENDER_ID合ってる? google-services.json合ってる? Noti cation
Channel作った? Receiver/FirebaseMessagingServiceを登録した? 端末許諾してる?マナーモード? ... 他にも、アイコンが出ない、バッジの数字が違う、タ ップした遷移先が違う、……
2019/1/28 reveal.js http://localhost:8000/?print-pdf 9/25 SDK開発者としての配慮 SDK開発者としての配慮 実装に必要なステップは極力減らす ドキュメントはシンプルに分かりやすく書く Firebaseのドキュメントを のドキュメントを読
読む むよりも よりも 簡 簡単 単に に実 実装 装できる できる! !
2019/1/28 reveal.js http://localhost:8000/?print-pdf 10/25 ⚡2018年4月 ⚡ ⚡2018年4月 ⚡
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
2019/1/28 reveal.js http://localhost:8000/?print-pdf 12/25 REPRO SDKをGCMからFCMに移行 REPRO SDKをGCMからFCMに移行 コード上が変わったのはpush tokenの取得だけ
中身の をリ プレース これで問題ないじゃない?
2019/1/28 reveal.js http://localhost:8000/?print-pdf 13/25 TOKENの取得メソッドが多すぎ TOKENの取得メソッドが多すぎ => deprecated => なぜか残って
る => 推奨されてるけど新しすぎ (>=16.2.0)
2019/1/28 reveal.js http://localhost:8000/?print-pdf 14/25 互換性を維持できるけど、いつまた使えなくなる か分からない なんで残ってんの? クライアントのアプリがまだそこまでアップデー トできないかもしれない ドキュメントは、初めてプッシュ通知を実装する人
でも失敗しないようにしたいので、複数のやり方を 混ぜて書きたくない
2019/1/28 reveal.js http://localhost:8000/?print-pdf 15/25 アプリなら悩むことはないけど、 アプリなら悩むことはないけど、 ライブラリーだと悩ましい! ライブラリーだと悩ましい!
2019/1/28 reveal.js http://localhost:8000/?print-pdf 16/25 結果 結果 でtokenを取得する => 最新のものを使うことで、またすぐに deprecationに心配する必要がない
アプリ側でtokenを取得してからSDKに渡すAPIは を維持する => などでも使えるようにしておく
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 == }) }
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<InstanceIdResult> 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; }
2019/1/28 reveal.js http://localhost:8000/?print-pdf 19/25 return true; }
2019/1/28 reveal.js http://localhost:8000/?print-pdf 20/25 Native Android SDKは前述の方法で対応 UnityとCocos2d-xは公式のSDKがあるので、token 取得は公式SDKに任せる
2019/1/28 reveal.js http://localhost:8000/?print-pdf 21/25 CORDOVA CORDOVA 公式のpluginがない… => Repro Cordova
Plugin側でtokenを取得する
2019/1/28 reveal.js http://localhost:8000/?print-pdf 22/25 CORDOVAは非公式のPLUGINも CORDOVAは非公式のPLUGINも 多く使われている 多く使われている phonegap-plugin-push cordova-plugin-
rebase => 互換性を考えないといけない
2019/1/28 reveal.js http://localhost:8000/?print-pdf 23/25 FIREBASEライブラリーの衝突 FIREBASEライブラリーの衝突 => Repro Cordova Pluginの依存バージョンを、
plugin追加時に指定できるようにする
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 }
2019/1/28 reveal.js http://localhost:8000/?print-pdf 25/25 まとめ まとめ SDK開発はアプリよりも、あらゆる状況を考える必 要がある Fancyなことをやらない代わりに、いろんな状況を 想定、調査してから実装する
そういう開発スタイルが好きな人なら向いてる Cordova Pluginを作るときは他のPluginとの共存を 考えて、行儀よくしよう!