Hello Friends,
Google moved from Google Cloud Messaging (GCM) to Firebase Cloud Messaging (FCM). Just like GCM, FCM is a cross-platform messaging solution that allows you to send messages. FCM is completely free and there are no limitations.
1. MainActivity.java
2. MyFirebaseInstanceIDService.java
3. MyFirebaseMessagingService.java
4. AndroidManifest.xml
Download code from here
Hope you like this...
Enjoy Coding..... :)
Google moved from Google Cloud Messaging (GCM) to Firebase Cloud Messaging (FCM). Just like GCM, FCM is a cross-platform messaging solution that allows you to send messages. FCM is completely free and there are no limitations.
- Firebase Message types : Using FCM you can send three types of messages i.e:
- Notification Message
- Data Message
- both Notification & Data Payload
- Integrating Firebase Cloud Messaging
- First thing you need to do is go to https://firebase.google.com/ and make an account to gain access to their console. After you gain access to the console you can start by creating your first project.
- Give the package name of your project in which you are going to integrate the Firebase. Here the google-services.json file will be downloaded when you press add app button.
- Sending Messages from Firebase Console : Go to firebase console(https://console.firebase.google.com/project/fir-notification-d7287/notification) and click on Notifications in left menu. You will get an interface where you can type the message, select the targeting and send the message.
1. MainActivity.java
- package android.developer.solutions.firebasenotification.activity;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.content.SharedPreferences;
- import android.developer.solutions.firebasenotification.R;
- import android.developer.solutions.firebasenotification.app.Config;
- import android.developer.solutions.firebasenotification.util.NotificationUtils;
- import android.os.Bundle;
- import android.support.v4.content.LocalBroadcastManager;
- import android.support.v7.app.AppCompatActivity;
- import android.text.TextUtils;
- import android.util.Log;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.google.firebase.messaging.FirebaseMessaging;
- public class MainActivity extends AppCompatActivity {
- private static final String TAG = MainActivity.class.getSimpleName();
- private BroadcastReceiver mRegistrationBroadcastReceiver;
- private TextView txtRegId, txtMessage;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- txtRegId = (TextView) findViewById(R.id.txt_reg_id);
- txtMessage = (TextView) findViewById(R.id.txt_push_message);
- mRegistrationBroadcastReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- // checking for type intent filter
- if (intent.getAction().equals(Config.REGISTRATION_COMPLETE)) {
- // gcm successfully registered
- // now subscribe to global` topic to receive app wide notifications
- FirebaseMessaging.getInstance().subscribeToTopic(Config.TOPIC_GLOBAL);
- displayFirebaseRegId();
- } else if (intent.getAction().equals(Config.PUSH_NOTIFICATION)) {
- // new push notification is received
- String message = intent.getStringExtra("message");
- Toast.makeText(getApplicationContext(), "Push notification: " + message, Toast.LENGTH_LONG).show();
- txtMessage.setText(message);
- }
- }
- };
- displayFirebaseRegId();
- }
- // Fetches reg id from shared preferences
- // and displays on the screen
- private void displayFirebaseRegId() {
- SharedPreferences pref = getApplicationContext().getSharedPreferences(Config.SHARED_PREF, 0);
- String regId = pref.getString("regId", null);
- Log.e(TAG, "Firebase reg id: " + regId);
- if (!TextUtils.isEmpty(regId))
- txtRegId.setText("Firebase Reg Id: " + regId);
- else
- txtRegId.setText("Firebase Reg Id is not received yet!");
- }
- @Override
- protected void onResume() {
- super.onResume();
- // register GCM registration complete receiver
- // LocalBroadcastManager.getInstance(this).registerReceiver(mRegistrationBroadcastReceiver,
- // new IntentFilter(Config.REGISTRATION_COMPLETE));
- // register new push message receiver
- // by doing this, the activity will be notified each time a new message arrives
- LocalBroadcastManager.getInstance(this).registerReceiver(mRegistrationBroadcastReceiver,
- new IntentFilter(Config.PUSH_NOTIFICATION));
- // clear the notification area when the app is opened
- NotificationUtils.clearNotifications(getApplicationContext());
- }
- @Override
- protected void onPause() {
- LocalBroadcastManager.getInstance(this).unregisterReceiver(mRegistrationBroadcastReceiver);
- super.onPause();
- }
- }
2. MyFirebaseInstanceIDService.java
- package android.developer.solutions.firebasenotification.service;
- import android.content.Intent;
- import android.content.SharedPreferences;
- import android.developer.solutions.firebasenotification.app.Config;
- import android.support.v4.content.LocalBroadcastManager;
- import android.util.Log;
- import com.google.firebase.iid.FirebaseInstanceId;
- import com.google.firebase.iid.FirebaseInstanceIdService;
- /**
- * Created by Mukesh on 10/02/17.
- * www.androiddevelopersolutions.com/
- */
- public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
- private static final String TAG = MyFirebaseInstanceIDService.class.getSimpleName();
- @Override
- public void onTokenRefresh() {
- super.onTokenRefresh();
- String refreshedToken = FirebaseInstanceId.getInstance().getToken();
- // Saving reg id to shared preferences
- storeRegIdInPref(refreshedToken);
- // sending reg id to your server
- sendRegistrationToServer(refreshedToken);
- // Notify UI that registration has completed, so the progress indicator can be hidden.
- Intent registrationComplete = new Intent(Config.REGISTRATION_COMPLETE);
- registrationComplete.putExtra("token", refreshedToken);
- LocalBroadcastManager.getInstance(this).sendBroadcast(registrationComplete);
- }
- private void sendRegistrationToServer(final String token) {
- // sending gcm token to server
- Log.e(TAG, "sendRegistrationToServer: " + token);
- }
- private void storeRegIdInPref(String token) {
- SharedPreferences pref = getApplicationContext().getSharedPreferences(Config.SHARED_PREF, 0);
- SharedPreferences.Editor editor = pref.edit();
- editor.putString("regId", token);
- editor.commit();
- }
- }
3. MyFirebaseMessagingService.java
- package android.developer.solutions.firebasenotification.service;
- import android.content.Context;
- import android.content.Intent;
- import android.developer.solutions.firebasenotification.activity.MainActivity;
- import android.developer.solutions.firebasenotification.app.Config;
- import android.developer.solutions.firebasenotification.util.NotificationUtils;
- import android.support.v4.content.LocalBroadcastManager;
- import android.text.TextUtils;
- import android.util.Log;
- import com.google.firebase.messaging.FirebaseMessagingService;
- import com.google.firebase.messaging.RemoteMessage;
- import org.json.JSONException;
- import org.json.JSONObject;
- /**
- * Created by Mukesh on 10/02/17.
- * www.androiddevelopersolutions.com/
- */
- public class MyFirebaseMessagingService extends FirebaseMessagingService {
- private static final String TAG = MyFirebaseMessagingService.class.getSimpleName();
- private NotificationUtils notificationUtils;
- @Override
- public void onMessageReceived(RemoteMessage remoteMessage) {
- Log.e(TAG, "From: " + remoteMessage.getFrom());
- if (remoteMessage == null)
- return;
- // Check if message contains a notification payload.
- if (remoteMessage.getNotification() != null) {
- Log.e(TAG, "Notification Body: " + remoteMessage.getNotification().getBody());
- handleNotification(remoteMessage.getNotification().getBody());
- }
- // Check if message contains a data payload.
- if (remoteMessage.getData().size() > 0) {
- Log.e(TAG, "Data Payload: " + remoteMessage.getData().toString());
- try {
- JSONObject json = new JSONObject(remoteMessage.getData().toString());
- handleDataMessage(json);
- } catch (Exception e) {
- Log.e(TAG, "Exception: " + e.getMessage());
- }
- }
- }
- private void handleNotification(String message) {
- if (!NotificationUtils.isAppIsInBackground(getApplicationContext())) {
- // app is in foreground, broadcast the push message
- Intent pushNotification = new Intent(Config.PUSH_NOTIFICATION);
- pushNotification.putExtra("message", message);
- LocalBroadcastManager.getInstance(this).sendBroadcast(pushNotification);
- // play notification sound
- NotificationUtils notificationUtils = new NotificationUtils(getApplicationContext());
- notificationUtils.playNotificationSound();
- } else {
- // If the app is in background, firebase itself handles the notification
- }
- }
- private void handleDataMessage(JSONObject json) {
- Log.e(TAG, "push json: " + json.toString());
- try {
- JSONObject data = json.getJSONObject("data");
- String title = data.getString("title");
- String message = data.getString("message");
- boolean isBackground = data.getBoolean("is_background");
- String imageUrl = data.getString("image");
- String timestamp = data.getString("timestamp");
- JSONObject payload = data.getJSONObject("payload");
- Log.e(TAG, "title: " + title);
- Log.e(TAG, "message: " + message);
- Log.e(TAG, "isBackground: " + isBackground);
- Log.e(TAG, "payload: " + payload.toString());
- Log.e(TAG, "imageUrl: " + imageUrl);
- Log.e(TAG, "timestamp: " + timestamp);
- if (!NotificationUtils.isAppIsInBackground(getApplicationContext())) {
- // app is in foreground, broadcast the push message
- Intent pushNotification = new Intent(Config.PUSH_NOTIFICATION);
- pushNotification.putExtra("message", message);
- LocalBroadcastManager.getInstance(this).sendBroadcast(pushNotification);
- // play notification sound
- NotificationUtils notificationUtils = new NotificationUtils(getApplicationContext());
- notificationUtils.playNotificationSound();
- } else {
- // app is in background, show the notification in notification tray
- Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class);
- resultIntent.putExtra("message", message);
- // check for image attachment
- if (TextUtils.isEmpty(imageUrl)) {
- showNotificationMessage(getApplicationContext(), title, message, timestamp, resultIntent);
- } else {
- // image is present, show notification with image
- showNotificationMessageWithBigImage(getApplicationContext(), title, message, timestamp, resultIntent, imageUrl);
- }
- }
- } catch (JSONException e) {
- Log.e(TAG, "Json Exception: " + e.getMessage());
- } catch (Exception e) {
- Log.e(TAG, "Exception: " + e.getMessage());
- }
- }
- /**
- * Showing notification with text only
- */
- private void showNotificationMessage(Context context, String title, String message, String timeStamp, Intent intent) {
- notificationUtils = new NotificationUtils(context);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
- notificationUtils.showNotificationMessage(title, message, timeStamp, intent);
- }
- /**
- * Showing notification with text and image
- */
- private void showNotificationMessageWithBigImage(Context context, String title, String message, String timeStamp, Intent intent, String imageUrl) {
- notificationUtils = new NotificationUtils(context);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
- notificationUtils.showNotificationMessage(title, message, timeStamp, intent, imageUrl);
- }
- }
4. AndroidManifest.xml
- <manifest package="android.developer.solutions.firebasenotification" xmlns:android="http://schemas.android.com/apk/res/android">
- <application android:allowbackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsrtl="true" android:theme="@style/AppTheme">
- <activity android:label="@string/title_main_activity" android:name=".activity.MainActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN">
- <category android:name="android.intent.category.LAUNCHER">
- </category></action></intent-filter>
- </activity>
- <!-- Firebase Notifications -->
- <service android:name=".service.MyFirebaseMessagingService">
- <intent-filter>
- <action android:name="com.google.firebase.MESSAGING_EVENT">
- </action></intent-filter>
- </service>
- <service android:name=".service.MyFirebaseInstanceIDService">
- <intent-filter>
- <action android:name="com.google.firebase.INSTANCE_ID_EVENT">
- </action></intent-filter>
- </service>
- <!-- ./Firebase Notifications -->
- </application>
- </manifest>
Download code from here
Hope you like this...
Enjoy Coding..... :)
0 comments:
Post a Comment