Gửi thông báo tới ứng dụng di động từ Rails server bằng Firebase Cloud Message
Trên trang viblo và một số diễn đàn đã có một vài bài viết hướng dẫn sữ dụng FCM, tuy nhiên các bài viết còn chưa cụ thế và rời rạc, rất khó cho những người mới bắt đầu tìm hiểu, nên trong bài viết này, mình xin tổng hợp lại một số bài viết để có một bài hướng dẫn chi tiết về gửi thông báo từ ...
Trên trang viblo và một số diễn đàn đã có một vài bài viết hướng dẫn sữ dụng FCM, tuy nhiên các bài viết còn chưa cụ thế và rời rạc, rất khó cho những người mới bắt đầu tìm hiểu, nên trong bài viết này, mình xin tổng hợp lại một số bài viết để có một bài hướng dẫn chi tiết về gửi thông báo từ Rails server tới ứng dụng Android, hi vọng sẽ có ích cho những bạn có ý định sữ dụng FCM ^^
1. Client Android
Vào https://console.firebase.google.com để tạo một Project
Chọn add Firebase to your Android app:
Copy Package bên Project Android vào package name:
Tải file google_services.json, và lưu vào bên trong thư mục app:
Sao chép các cấu hình vào Projecttheo hướng dẫn rồi nhấn Finish:
Manage Project:
Chọn tab CLOUD MESSAGEING:
Các bạn chú ý Server Key để sau này sữ dụng trong Rails server
Code Demo Android:
Khởi tạo Manifest.xml với receiver, service để nhận notification:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <permission android:name="com.mateuyabar.gcmsampleclient.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <application > ... <receiver android:name="com.google.android.gms.gcm.GcmReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="com.freedom.augmentedreality" /> </intent-filter> </receiver> <service android:name=".gcm.MyGcmListenerService" android:exported="false"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> </intent-filter> </service> ... </application>
Tạo MyGcmListenerService class nhận messages và hiển thị notification khi nhận được messages:
public class MyGcmListenerService extends GcmListenerService { private static final String TAG = "MyGcmListenerService"; @Override public void onMessageReceived(String from, Bundle data) { String title = data.getString("title"); String body = data.getString("body"); sendNotification(title, body); } private void sendNotification(String title, String body) { NotificationManager notificationManager= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_menu_gallery) .setContentTitle(title) .setContentText(body) .setVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 }); notificationManager.notify(1, mBuilder.build()); } }
Để gửi messages tới Android app cần reg_tokens của thiết bị, chúng ta sẽ tạo RegistrationIntentService class để lấy reg_tokens của thiết bị
public class RegistrationIntentService extends IntentService { private static final String TAG = "RegIntentService"; private static final String[] TOPICS = {"global"}; private String token = ""; public RegistrationIntentService() { super(TAG); } @Override protected void onHandleIntent(Intent intent) { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); try { InstanceID instanceID = InstanceID.getInstance(this); token = instanceID.getToken(getString(R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); Log.i(TAG, "GCM Registration Token: " + token); sendRegistrationToServer(token); } catch (Exception e) { Log.d(TAG, "Failed to complete token refresh", e); } Intent registrationComplete = new Intent(QuickstartPreferences.REGISTRATION_COMPLETE); registrationComplete.putExtra("reg_token", token); LocalBroadcastManager.getInstance(this).sendBroadcast(registrationComplete); } private void sendRegistrationToServer(String token) { // Send token to server } }
Lần chạy đầu tiên kiểm tra Log để nhận được Registration Id của thiết bị
2. Rails server
Thêm gem "fcm" như các gem khác
Tạo function send_message helper thực hiện gửi message tới Android thông qua reg_tokens
require 'fcm' module ApplicationHelper def send_message title, body, reg_tokens fcm = FCM.new("YOUR_SERVER_KEY") registration_ids= reg_tokens options = { :data => { :title => title, :body => body } } response = fcm.send(registration_ids, options) end end
YOUR_SERVER_KEY: bạn thay bằng server key lấy ở bước trên reg_tokens là ** Registration Id** của thiết bị android Gọi function send_message mỗi khi muốn gửi thông báo tới client android
Bài viết này mình tổng hợp từ các bài viết đã có, các bạn có thể tham khảo thêm: https://duythanhcse.wordpress.com/2016/08/11/bai-72-hoc-firebase-cloud-messagefcm/ https://viblo.asia/phannh_58/posts/APqzeaAVzVe https://viblo.asia/bui.xuan.hien/posts/bxjeZYJXGJZ