Mobil Informatikai Rendszerek FCM Firebase Cloud Messaging GCM, C2DM, Push notification Sicz-Mesziár János sicz-mesziar.janos@nik.uni-obuda.hu Mezei József mezei.jozsef@nik.uni-obuda.hu 2018. április 18.
Firebase I. BaaS (Backend as a Service) NoSQL, valósidejű sync Offline is elérhető marad Web alkalmazások és statikus tartalmak közzététele Mobil/Szerver/Web (NoSQL) Flexibilis, skálázható Offline support Felhasználói tartalom tárolás (képek/videók/hang állományok) Esemény vezérelt szerver kód futtatás Teljesítmény monitorozás Gmail/Facebook/Twitter/Github/Email/SMS Alkalmazás követés Sicz-Mesziár János Mezei József 4/18/2018 2
Firebase II. Google Analitika (hány alkalommal nézik meg a tartalmat a felhasználók, megtalálják e a gombot ) Email SMS Értesítések Felhasználóink nymonkövetése, mit fognak tenni kedvezmények ajánlása Jövőbeli lehetőségek reklámozása Gépi tanulással előrevetíti felhasználóink cselekedetét Alkalmazáson belüli és webes reklámok megjelenítse Mobilon alkalmazás, weben honlap tartalom Alkalmazás működésének és kinézetének változtatása új verzió publikálása nélkül Kereső optimalizálás Sicz-Mesziár János Mezei József 4/18/2018 3
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 Mezei József 4/18/2018 4
Push notification data flow Sicz-Mesziár János Mezei József 4/18/2018 5
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 Mezei József 4/18/2018 6
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 Mezei József 4/18/2018 7
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 Mezei József 4/18/2018 8
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 Mezei József 4/18/2018 9
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 Mezei József 4/18/2018 10
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 Mezei József 4/18/2018 11
FCM üzenet fogadása Android (3) MyFirebaseInstanceIDService.kt class MyFirebaseInstanceIDService : FirebaseInstanceIdService() { override fun ontokenrefresh() { super.ontokenrefresh() // Get updated InstanceID token. val refreshedtoken = FirebaseInstanceId.getInstance().token sendregistrationtoserver(refreshedtoken) private fun sendregistrationtoserver(token: String?) { // 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 Mezei József 4/18/2018 12
FCM üzenet fogadása Android (4) MyFirebaseMessagingService.kt class MyFirebaseMessagingService : FirebaseMessagingService() { val TAG = "Firebase_Message override fun onmessagereceived(remotemessage: RemoteMessage?) { super.onmessagereceived(remotemessage) // Check if message contains a data payload. remotemessage?.let { if (it.data.isnotempty()) Log.d(TAG, "Message data payload: " + remotemessage.data) // Check if message contains a notification payload. remotemessage?.notification?.let { Log.d(TAG, "Message Notification Body: ${it.body") private fun sendnotification(messagebody: String?){ // Todo: Show notification Sicz-Mesziár János Mezei József 4/18/2018 13
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 Mezei József 4/18/2018 14