Mobil Informatikai Rendszerek FCM Firebase Cloud Messaging GCM, C2DM, Push notification 2016. november 13. Sicz-Mesziár János sicz- m e s z i a r. j a n o s @ nik.uni - obuda.hu
Push notification A Push notification lehetővé teszi, hogy szerver oldalról küldjünk üzenetet a kliens alkalmazásnak. Jellemzői: A kliensek folyamatosan low-level (TCP/IP) alapon kapcsolódnak a kiszolgáló szerver parkhoz. Minimális üzenet méret kiküldésére alkalmasak. 256Kb - 4K Delay és TTL támogatás, disconnect kezelés Egyedileg vagy akár több kliens is megcímezhető. Tetszőleges tartalom. Mobil platformonként más-más kiszolgáló szerver park áll rendelkezésre. Sávszél és energia hatékony megoldás Sicz-Mesziár János 11/13/2016 2
Push notification data flow Sicz-Mesziár János 11/13/2016 3
Push notification - szolgáltatások Apple: APNS: Apple Push Notification Service Google: C2DM: Cloud to Device Message: Régebben, mára deprecated lett, a GCM váltotta GCM: Google Cloud Messaging 4K message, 2 irányú XMPP protokol, FCM váltja FCM: Firebase Cloud Messaging Microsoft: WNS: Windows Push Notification Services + Web Push API: https://developer.mozilla.org/en/docs/web/api/push_api Sicz-Mesziár János 11/13/2016 4
FCM Firebase Cloud Messaging Cross-platform üzenet küldési szolgáltatás Célja, hogy egy egységes rendszer fogja össze a különböző aszinkron üzenet értesítési megoldásokat. Alábbiak támogatottak: Android: lényegében a GCM-re épül ios: APNS feletti megoldás Web C++ Unity Bővebben: https://firebase.google.com/do cs/cloud-messaging/ Sicz-Mesziár János 11/13/2016 5
FCM üzenet küldése HTTP Post üzenet küldése Firebase szerverére https://fcm.googleapis.com/fcm/send Kérés felépítése: Content-Type:application/json Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA { "collapse_key": "score_update", "time_to_live": 108, "data": { "score": "5x1", "time": "15:10", "to" : ["bk3rnwte3h0:ci2k_hhwgipodkcizvvdmexudfq3p1..."] Sicz-Mesziár János 11/13/2016 6
FCM üzenet küldése (2) Firebase szerver válasza { "multicast_id": 216, "success": 3, "failure": 3, "canonical_ids": 1, "results": [ { "message_id": "1:0408", { "error": "Unavailable", { "error": "InvalidRegistration", { "message_id": "1:1516", { "message_id": "1:2342", "registration_id": "32", { "error": "NotRegistered" ] Sicz-Mesziár János 11/13/2016 7
FCM üzenet fogadása - Android Minimum Android 2.3 Firebase project készítése Új projekt létrehozása a Firebase console-on https://firebase.google.com/console/ Alkalmazás package név és SHA-1 lenyomat megadása keytool -list -v -keystore "C:\Users\[user_name]\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android Config (JSON) fájl hozzáadása az Android alkalmazáshoz /project/app Sicz-Mesziár János 11/13/2016 8
FCM üzenet fogadása Android (2) Gradle-ben új függőség dependencies { compile 'com.google.firebase:firebase-messaging:9.8.0' AndroidManifest.xml-ben két service regisztrálása <service android:name=".myfirebasemessagingservice"> <intent-filter> <action android:name="com.google.firebase.messaging_event"/> </intent-filter> </service> <service android:name=".myfirebaseinstanceidservice"> <intent-filter> <action android:name="com.google.firebase.instance_id_event"/> </intent-filter> </service> Sicz-Mesziár János 11/13/2016 9
FCM üzenet fogadása Android (3) MyFirebaseInstanceIDService.java public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { public void ontokenrefresh() { // Get updated InstanceID token. String refreshedtoken = FirebaseInstanceId.getInstance().getToken(); sendregistrationtoserver(refreshedtoken); private void sendregistrationtoserver(string token) { // TODO: Implement this method to send token to your app server. A token megváltozhat, ha: Felhasználó eltávolítja / újratelepíti az alkalmazást Felhasználó törli az alkalmazás adatokat Alkalmazás helyreállításra kerül egy új készüléken (új install) Az alkalmazás törli az Instance ID-t Sicz-Mesziár János 11/13/2016 10
FCM üzenet fogadása Android (4) MyFirebaseMessagingService.java public class MyFirebaseMessagingService extends FirebaseMessagingService { public void onmessagereceived(remotemessage remotemessage) { // Check if message contains a data payload. if (remotemessage.getdata().size() > 0) { Log.d(TAG, "Message data payload: " + remotemessage.getdata()); // Check if message contains a notification payload. if (remotemessage.getnotification()!= null) { Log.d(TAG, "Message Notification Body: " + remotemessage.getnotification().getbody()); private void sendnotification(string messagebody) { // TODO show notification Sicz-Mesziár János 11/13/2016 11
FCM üzenet fogadása Android (5) A bejövő üzenetek automatikusan is meg tudnak jelenni a notification bar-on. Foreground vs Background Bővebben: https://firebase.google.com/docs/cloudmessaging/android/receive Sicz-Mesziár János 11/13/2016 12