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
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
570
Background Execution LimitsのAndroid Pの変更点?
konyavic
0
570
Spoonを使わずにテストケースでスクショを撮りたい
konyavic
0
300
SDK開発にUIテストを導入してみた
konyavic
1
2.4k
Other Decks in Programming
See All in Programming
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
390
エージェンティックRAGにAWSで入門しよう!
har1101
9
1.9k
Webフレームワークの ベンチマークについて
yusukebe
0
200
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
270
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
7
2.9k
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
150
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
0
140
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.7k
act1-costs.pdf
sumedhbala
0
170
吝嗇家のためのAI活用 / AI development for miser - ChatGPT + Issue Driven Development
tooppoo
0
180
Vite+ Unified Toolchain for the Web
naokihaba
0
700
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
790
Featured
See All Featured
Deep Space Network (abreviated)
tonyrice
0
220
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
210
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
Building a Scalable Design System with Sketch
lauravandoore
463
34k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Scaling GitHub
holman
464
140k
The Pragmatic Product Professional
lauravandoore
37
7.4k
30 Presentation Tips
portentint
PRO
1
340
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との共存を 考えて、行儀よくしよう!