Upgrade to Pro — share decks privately, control downloads, hide ads and more …

5プラットフォームをサポートしているプッシュ通知SDKをFCMに移行した話

Victor Lee
January 28, 2019

 5プラットフォームをサポートしているプッシュ通知SDKをFCMに移行した話

Victor Lee

January 28, 2019
Tweet

More Decks by Victor Lee

Other Decks in Programming

Transcript

  1. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 1/25
    5プラットフォームを
    5プラットフォームを
    サポートしている
    サポートしている
    プッシュ通知SDKを
    プッシュ通知SDKを
    FCMに移行した話
    FCMに移行した話
    potatotips#58
    @konyavic, 2019/01/28

    View full-size slide

  2. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 2/25
    WHO
    WHO
    @konyavic
    今はReproでSDK開発をやっている
    主にObjc/Java
    最近はGoとRubyも始めた
    SDK開発にUIテストを導入してみた

    View full-size slide

  3. 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

    View full-size slide

  4. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 4/25
    4000万
    万デバイス
    デバイス
    4000万
    万デバイス
    デバイスで動作
    で動作

    月間
    間20億
    億個
    個プッシュ
    プッシュ通知
    通知

    月間
    間20億
    億個
    個プッシュ
    プッシュ通知
    通知を配信
    を配信

    View full-size slide

  5. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 5/25
    少しでも変更するときはビビる!
    少しでも変更するときはビビる!

    View full-size slide

  6. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 6/25
    ところで
    ところで

    View full-size slide

  7. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 7/25
    プッシュ通知の実装はミスしやすい
    プッシュ通知の実装はミスしやすい
    よね?
    よね?

    View full-size slide

  8. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 8/25
    実装してAPI叩いたのに届かない
    実装してAPI叩いたのに届かない
    SENDER_ID合ってる?
    google-services.json合ってる?
    Noti cation Channel作った?
    Receiver/FirebaseMessagingServiceを登録した?
    端末許諾してる?マナーモード?
    ...
    他にも、アイコンが出ない、バッジの数字が違う、タ
    ップした遷移先が違う、……

    View full-size slide

  9. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 9/25
    SDK開発者としての配慮
    SDK開発者としての配慮
    実装に必要なステップは極力減らす
    ドキュメントはシンプルに分かりやすく書く
    Firebaseのドキュメントを
    のドキュメントを読
    読む
    むよりも
    よりも

    簡単
    単に
    に実
    実装
    装できる
    できる!

    View full-size slide

  10. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 10/25
    ⚡2018年4月

    ⚡2018年4月

    View full-size slide

  11. 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

    View full-size slide

  12. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 12/25
    REPRO SDKをGCMからFCMに移行
    REPRO SDKをGCMからFCMに移行
    コード上が変わったのはpush tokenの取得だけ
    中身の をリ
    プレース
    これで問題ないじゃない?

    View full-size slide

  13. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 13/25
    TOKENの取得メソッドが多すぎ
    TOKENの取得メソッドが多すぎ
    => deprecated
    => なぜか残って

    => 推奨されてるけど新しすぎ
    (>=16.2.0)

    View full-size slide

  14. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 14/25
    互換性を維持できるけど、いつまた使えなくなる
    か分からない
    なんで残ってんの?
    クライアントのアプリがまだそこまでアップデー
    トできないかもしれない
    ドキュメントは、初めてプッシュ通知を実装する人
    でも失敗しないようにしたいので、複数のやり方を
    混ぜて書きたくない

    View full-size slide

  15. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 15/25
    アプリなら悩むことはないけど、
    アプリなら悩むことはないけど、
    ライブラリーだと悩ましい!
    ライブラリーだと悩ましい!

    View full-size slide

  16. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 16/25
    結果
    結果
    でtokenを取得する
    => 最新のものを使うことで、またすぐに
    deprecationに心配する必要がない
    アプリ側でtokenを取得してからSDKに渡すAPIは
    を維持する
    => などでも使えるようにしておく

    View full-size slide

  17. 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 ==
    })
    }

    View full-size slide

  18. 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;
    }

    View full-size slide

  19. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 19/25
    return true;
    }

    View full-size slide

  20. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 20/25
    Native Android SDKは前述の方法で対応
    UnityとCocos2d-xは公式のSDKがあるので、token
    取得は公式SDKに任せる

    View full-size slide

  21. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 21/25
    CORDOVA
    CORDOVA
    公式のpluginがない…
    => Repro Cordova Plugin側でtokenを取得する

    View full-size slide

  22. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 22/25
    CORDOVAは非公式のPLUGINも
    CORDOVAは非公式のPLUGINも
    多く使われている
    多く使われている
    phonegap-plugin-push
    cordova-plugin- rebase
    => 互換性を考えないといけない

    View full-size slide

  23. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 23/25
    FIREBASEライブラリーの衝突
    FIREBASEライブラリーの衝突
    => Repro Cordova Pluginの依存バージョンを、
    plugin追加時に指定できるようにする

    View full-size slide

  24. 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
    }

    View full-size slide

  25. 2019/1/28 reveal.js
    http://localhost:8000/?print-pdf 25/25
    まとめ
    まとめ
    SDK開発はアプリよりも、あらゆる状況を考える必
    要がある
    Fancyなことをやらない代わりに、いろんな状況を
    想定、調査してから実装する
    そういう開発スタイルが好きな人なら向いてる
    Cordova Pluginを作るときは他のPluginとの共存を
    考えて、行儀よくしよう!

    View full-size slide