summaryrefslogtreecommitdiff
path: root/StoneIsland/plugins/cordova-plugin-firebase/src/android/FirebasePluginMessagingService.java
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2017-09-26 00:21:27 +0200
committerJules Laplace <julescarbon@gmail.com>2017-09-26 00:21:27 +0200
commit73cbc66bb96b348ec791e6854d6c24e6d85b2fa8 (patch)
treed06eddeec93e692fde63cde5b21a20ff623f1386 /StoneIsland/plugins/cordova-plugin-firebase/src/android/FirebasePluginMessagingService.java
parent3be2b3aea204f145d6e7c98d835891947105ed0e (diff)
cordova-plugin-firebase
Diffstat (limited to 'StoneIsland/plugins/cordova-plugin-firebase/src/android/FirebasePluginMessagingService.java')
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/android/FirebasePluginMessagingService.java127
1 files changed, 127 insertions, 0 deletions
diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/android/FirebasePluginMessagingService.java b/StoneIsland/plugins/cordova-plugin-firebase/src/android/FirebasePluginMessagingService.java
new file mode 100755
index 00000000..a42ce60e
--- /dev/null
+++ b/StoneIsland/plugins/cordova-plugin-firebase/src/android/FirebasePluginMessagingService.java
@@ -0,0 +1,127 @@
+package org.apache.cordova.firebase;
+
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.v4.app.NotificationCompat;
+import android.util.Log;
+import android.app.Notification;
+import android.text.TextUtils;
+
+import com.google.firebase.messaging.FirebaseMessagingService;
+import com.google.firebase.messaging.RemoteMessage;
+
+import java.util.Map;
+import java.util.Random;
+
+public class FirebasePluginMessagingService extends FirebaseMessagingService {
+
+ private static final String TAG = "FirebasePlugin";
+
+ /**
+ * Called when message is received.
+ *
+ * @param remoteMessage Object representing the message received from Firebase Cloud Messaging.
+ */
+ @Override
+ public void onMessageReceived(RemoteMessage remoteMessage) {
+ // [START_EXCLUDE]
+ // There are two types of messages data messages and notification messages. Data messages are handled
+ // here in onMessageReceived whether the app is in the foreground or background. Data messages are the type
+ // traditionally used with GCM. Notification messages are only received here in onMessageReceived when the app
+ // is in the foreground. When the app is in the background an automatically generated notification is displayed.
+ // When the user taps on the notification they are returned to the app. Messages containing both notification
+ // and data payloads are treated as notification messages. The Firebase console always sends notification
+ // messages. For more see: https://firebase.google.com/docs/cloud-messaging/concept-options
+ // [END_EXCLUDE]
+
+ // TODO(developer): Handle FCM messages here.
+ // Not getting messages here? See why this may be: https://goo.gl/39bRNJ
+ String title;
+ String text;
+ String id;
+ if (remoteMessage.getNotification() != null) {
+ title = remoteMessage.getNotification().getTitle();
+ text = remoteMessage.getNotification().getBody();
+ id = remoteMessage.getMessageId();
+ } else {
+ title = remoteMessage.getData().get("title");
+ text = remoteMessage.getData().get("text");
+ id = remoteMessage.getData().get("id");
+ }
+
+ if(TextUtils.isEmpty(id)){
+ Random rand = new Random();
+ int n = rand.nextInt(50) + 1;
+ id = Integer.toString(n);
+ }
+
+ Log.d(TAG, "From: " + remoteMessage.getFrom());
+ Log.d(TAG, "Notification Message id: " + id);
+ Log.d(TAG, "Notification Message Title: " + title);
+ Log.d(TAG, "Notification Message Body/Text: " + text);
+
+ // TODO: Add option to developer to configure if show notification when app on foreground
+ if (!TextUtils.isEmpty(text) || !TextUtils.isEmpty(title) || (!remoteMessage.getData().isEmpty())) {
+ boolean showNotification = (FirebasePlugin.inBackground() || !FirebasePlugin.hasNotificationsCallback()) && (!TextUtils.isEmpty(text) || !TextUtils.isEmpty(title));
+ sendNotification(id, title, text, remoteMessage.getData(), showNotification);
+ }
+ }
+
+ private void sendNotification(String id, String title, String messageBody, Map<String, String> data, boolean showNotification) {
+ Bundle bundle = new Bundle();
+ for (String key : data.keySet()) {
+ bundle.putString(key, data.get(key));
+ }
+ if (showNotification) {
+ Intent intent = new Intent(this, OnNotificationOpenReceiver.class);
+ intent.putExtras(bundle);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(this, id.hashCode(), intent,
+ PendingIntent.FLAG_UPDATE_CURRENT);
+
+ Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
+ NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
+ .setContentTitle(title)
+ .setContentText(messageBody)
+ .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
+ .setStyle(new NotificationCompat.BigTextStyle().bigText(messageBody))
+ .setAutoCancel(true)
+ .setSound(defaultSoundUri)
+ .setContentIntent(pendingIntent);
+
+ int resID = getResources().getIdentifier("notification_icon", "drawable", getPackageName());
+ if (resID != 0) {
+ notificationBuilder.setSmallIcon(resID);
+ } else {
+ notificationBuilder.setSmallIcon(getApplicationInfo().icon);
+ }
+
+ if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M)
+ {
+ int accentID = getResources().getIdentifier("accent", "color", getPackageName());
+ notificationBuilder.setColor(getResources().getColor(accentID, null));
+ }
+
+ Notification notification = notificationBuilder.build();
+ if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
+ int iconID = android.R.id.icon;
+ int notiID = getResources().getIdentifier("notification_big", "drawable", getPackageName());
+ if (notification.contentView != null) {
+ notification.contentView.setImageViewResource(iconID, notiID);
+ }
+ }
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+ notificationManager.notify(id.hashCode(), notification);
+ } else {
+ bundle.putBoolean("tap", false);
+ bundle.putString("title", title);
+ bundle.putString("body", messageBody);
+ FirebasePlugin.sendNotification(bundle);
+ }
+ }
+}