Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
5プラットフォームをサポートしているプッシュ通知SDKをFCMに移行した話
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
590
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
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
340
Foundry Localでエージェント開発
seosoft
0
150
Can LLMs Replicate 4 Years of Compose Migration? Exploring the boundaries of automation with 279 XML files from a real product
makun
0
130
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
55
36k
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
170
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
680
RSSとCodexを使ってX投稿自動化してみた
ochtum
0
110
Family mrubyの進捗
kishima
1
100
[DroidKaigi 2026] Bring your own phones to Gradle Managed Devices
f2lk
0
110
MIZARU@SPAJAM2026 第二回予選
1901drama
0
110
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
220
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
0
140
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
We Are The Robots
honzajavorek
0
350
Everyday Curiosity
cassininazir
0
310
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
590
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
HDC tutorial
michielstock
2
850
It's Worth the Effort
3n
188
29k
Crafting Experiences
bethany
1
300
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
510
How to Think Like a Performance Engineer
csswizardry
28
2.8k
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との共存を 考えて、行儀よくしよう!