俺が考える最強のPush Receiver

俺が考える最強のPush Receiver

FCMとReproを共存させるためにちょっと考えてみた

3f71b30b9cca149015a99fe509abd63f?s=128

hayashi hirotake

August 28, 2018
Tweet

Transcript

  1. REPRO TECH MEETUP #2 Navigate : Space / Arrow Keys

    | - Menu | - Fullscreen | - Overview | - Blackout | - Speaker | - Help M F O B S ?  1 / 37
  2. INTRO  @hiroxyy_ hiroxyy Repro CRE Team Leader 3名 Technical

    Support Main: Android(半年ちょい) [ GitPitch @ github/hiroxyy/slides ]  2 / 37
  3. 最近こんな問い合わせが ありました [ GitPitch @ github/hiroxyy/slides ]  3 /

    37
  4. FCMを既に使っていて ReproのPushを受信するためには どうしたらいいですか?  [ GitPitch @ github/hiroxyy/slides ] 

    4 / 37
  5. よしなに実装して まじで ほんとに 頼むから [ GitPitch @ github/hiroxyy/slides ] 

    5 / 37
  6. そんなCREイケてないよね  [ GitPitch @ github/hiroxyy/slides ]  6 /

    37
  7. イケてるCREに僕はなりたい  [ GitPitch @ github/hiroxyy/slides ]  7 /

    37
  8. 作っちゃおう  [ GitPitch @ github/hiroxyy/slides ]  8 /

    37
  9. 俺が考える最強の Push Receiver [ GitPitch @ github/hiroxyy/slides ]  9

    / 37
  10. 余談なんですがPUSHのサービス [ GitPitch @ github/hiroxyy/slides ]  10 / 37

  11. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

    Repro Amazon Simple Notification Service mobile backend Appvisor push CORE PUSH Growth Push Kii Cloud Urban Airship PushWoosh MAJIN [ GitPitch @ github/hiroxyy/slides ]  11 / 37
  12. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

    OneSignal pushnate push7 LOGBASE batch Braze kumulos SWRVE Upsight Accengage [ GitPitch @ github/hiroxyy/slides ]  12 / 37
  13. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

    Catapush Mapp Leanplum OneSignal Intercom Pusher Carnival.io PushBots Localytics Kahuna [ GitPitch @ github/hiroxyy/slides ]  13 / 37
  14. 1. 2. 3. Taplytics Mixpanel StreetHawk [ GitPitch @ github/hiroxyy/slides

    ]  14 / 37
  15. めっちゃある  [ GitPitch @ github/hiroxyy/slides ]  15 /

    37
  16. 自分好みのサービス探すのも 面白そう [ GitPitch @ github/hiroxyy/slides ]  16 /

    37
  17. 余談終わり [ GitPitch @ github/hiroxyy/slides ]  17 / 37

  18. れっつら最強RECEIVER! [ GitPitch @ github/hiroxyy/slides ]  18 / 37

  19. の前に AndroidのPushについて 簡単におさらい [ GitPitch @ github/hiroxyy/slides ]  19

    / 37
  20. ANDROIDのPUSH表示処理 1. ブロードキャストされたintentを BroadcastReceiverで受信 intentに含むキーによって、Data Messageと Notification Messageの2つに分類される 2. 受信したintentをReceiverでハンドリングし、

    端末上に表示 [ GitPitch @ github/hiroxyy/slides ]  20 / 37
  21. AndroidManifest.xml 01 // Firebase Push Service 02 <service 03 android:name=".MyFirebaseMessagingService">

    04 <intent-filter> 05 <action android:name="com.google.firebase.MESS 06 </intent-filter> 07 </service> 08 09 // Repro Push Receiver 10 <receiver 11 android:name="com.hiroxy.multipushapp.MyGCMReceive [ GitPitch @ github/hiroxyy/slides ]  21 / 37
  22. FCM Repro Notification Message FG:◯ BG:✕ FG:◯ BG:◦ Data Message

    FG:◯ BG:◦ FG:◯ BG:◦ FCM Serviceと Repro Receiverの比較 [ GitPitch @ github/hiroxyy/slides ]  22 / 37
  23. いい感じにハンドリングしないと、 FCMとREPRO両方に処理されて端末上 で同じPUSHが2通とか出ちゃう!  [ GitPitch @ github/hiroxyy/slides ] 

    23 / 37
  24. たまにそういうアプリあ、、、 [ GitPitch @ github/hiroxyy/slides ]  24 / 37

  25. どうしたら良さそうか?  [ GitPitch @ github/hiroxyy/slides ]  25 /

    37
  26. FirebaseMessagingServiceでは ハンドリングできないmessageがある Repro Receiverを使うのが良さそう  [ GitPitch @ github/hiroxyy/slides ]

     26 / 37
  27. MyGCMReceiver.java 01 package com.hiroxy.multipushapp; 02 03 … 04 05 public

    class MyGCMReceiver extends BroadcastReceiver { 06 07 private static final String TAG = "GCMReceiver"; 08 09 @Override 10 public void onReceive(Context context, Intent inte 11 中身を確認 [ GitPitch @ github/hiroxyy/slides ]  27 / 37
  28. INTENT比較 FCMからのPush(notification message)のintent 01 google.c.a.udt:0 02 google.sent_time:1535343208004 03 google.ttl:2419200 04

    gcm.notification.e:1 05 google.c.a.c_id:5316713855114895493 06 google.c.a.ts:1535343208 07 gcm.notification.title:From FCM //titleっぽい 08 gcm.n.e:1 09 from:918839616658 10 google.message_id:0:1535343208043592%c3f2cc90c3f2cc90 11 gcm.notification.body:fcm notification message from hi [ GitPitch @ github/hiroxyy/slides ]  28 / 37
  29. ReproからのPush(data message)のintent 01 google.sent_time:1535339920264 02 google.ttl:2419200 03 body:data message from

    hiroxyy // 定義したkey 04 from:918839616658 05 repro:n3ylk7yd // repro独自のkey 06 title:From Repro // 定義したkey 07 google.message_id:0:1535339920272127%c3f2cc90f9fd7ecd 08 google.priority:normal [ GitPitch @ github/hiroxyy/slides ]  29 / 37
  30. MyGCMReceiver.java 01 package com.hiroxy.multipushapp; 02 03 … 04 05 public

    class MyGCMReceiver extends BroadcastReceiver { 06 07 private static final String TAG = "GCMReceiver"; 08 09 @Override 10 public void onReceive(Context context, Intent inte 11 中身を確認 [ GitPitch @ github/hiroxyy/slides ]  30 / 37
  31. 全部のメッセージをハンドリングする RECEIVERを作るとなかなかカオス  [ GitPitch @ github/hiroxyy/slides ]  31

    / 37
  32. notificationもdataもやることは一緒 カスタマイズ性の高いdata messageだけを 利用するようにした方がReceiverの処理を スッキリ書けそう となると、FirebaseMessagingServiceを 利用するのもあり [ GitPitch @

    github/hiroxyy/slides ]  32 / 37
  33. 利用するMESSAGEやサービス毎に RECEIVERを作ったほうが良さそう? [ GitPitch @ github/hiroxyy/slides ]  33 /

    37
  34. FIREBASEのようにSERVICEで ハンドリングするようにするのは どうだろう? [ GitPitch @ github/hiroxyy/slides ]  34

    / 37
  35. 最強にはまだまだ遠かった!  [ GitPitch @ github/hiroxyy/slides ]  35 /

    37
  36. これからも良いアプリ設計を 提案できるように頑張ってこう!  [ GitPitch @ github/hiroxyy/slides ]  36

    / 37
  37. おわり ありがとうございました! [ GitPitch @ github/hiroxyy/slides ]  37 /

    37