-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #30 from virresh/push_notifs
Push notifications merged
- Loading branch information
Showing
6 changed files
with
221 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
164 changes: 164 additions & 0 deletions
164
app/src/main/java/com/mobilecomputing/sahayak/FireBaseFCMService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,164 @@ | ||
package com.mobilecomputing.sahayak; | ||
|
||
import android.app.NotificationChannel; | ||
import android.app.NotificationManager; | ||
import android.app.PendingIntent; | ||
import android.app.Service; | ||
import android.content.Context; | ||
import android.content.Intent; | ||
import android.media.RingtoneManager; | ||
import android.net.Uri; | ||
import android.os.Build; | ||
import android.os.IBinder; | ||
import android.util.Log; | ||
|
||
import androidx.core.app.NotificationCompat; | ||
|
||
import com.google.firebase.auth.FirebaseAuth; | ||
import com.google.firebase.database.DatabaseReference; | ||
import com.google.firebase.database.FirebaseDatabase; | ||
import com.google.firebase.messaging.FirebaseMessagingService; | ||
import com.google.firebase.messaging.RemoteMessage; | ||
import com.mobilecomputing.sahayak.Activities.MainActivity; | ||
|
||
public class FireBaseFCMService extends FirebaseMessagingService { | ||
|
||
private static final String TAG = "MyFirebaseMsgService"; | ||
|
||
/** | ||
* Called when message is received. | ||
* | ||
* @param remoteMessage Object representing the message received from Firebase Cloud Messaging. | ||
*/ | ||
// [START receive_message] | ||
@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 | ||
Log.d(TAG, "From: " + remoteMessage.getFrom()); | ||
|
||
// Check if message contains a data payload. | ||
if (remoteMessage.getData().size() > 0) { | ||
Log.d(TAG, "Message data payload: " + remoteMessage.getData()); | ||
|
||
if (/* Check if data needs to be processed by long running job */ true) { | ||
// For long-running tasks (10 seconds or more) use WorkManager. | ||
// scheduleJob(); | ||
Log.d(TAG, "Needed to schedule long job !"); | ||
} else { | ||
// Handle message within 10 seconds | ||
handleNow(); | ||
} | ||
|
||
} | ||
|
||
// Check if message contains a notification payload. | ||
if (remoteMessage.getNotification() != null) { | ||
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); | ||
} | ||
|
||
// Also if you intend on generating your own notifications as a result of a received FCM | ||
// message, here is where that should be initiated. See sendNotification method below. | ||
} | ||
// [END receive_message] | ||
|
||
|
||
// [START on_new_token] | ||
|
||
/** | ||
* Called if InstanceID token is updated. This may occur if the security of | ||
* the previous token had been compromised. Note that this is called when the InstanceID token | ||
* is initially generated so this is where you would retrieve the token. | ||
*/ | ||
@Override | ||
public void onNewToken(String token) { | ||
Log.d(TAG, "Refreshed token: " + token); | ||
getSharedPreferences("_", MODE_PRIVATE).edit().putString("fb", token).apply(); | ||
|
||
// If you want to send messages to this application instance or | ||
// manage this apps subscriptions on the server side, send the | ||
// Instance ID token to your app server. | ||
// sendRegistrationToServer(token); | ||
} | ||
// [END on_new_token] | ||
|
||
public static String getToken(Context context) { | ||
return context.getSharedPreferences("_", MODE_PRIVATE).getString("fb", "empty"); | ||
} | ||
|
||
/** | ||
* Handle time allotted to BroadcastReceivers. | ||
*/ | ||
private void handleNow() { | ||
Log.d(TAG, "Short lived task is done."); | ||
} | ||
|
||
/** | ||
* Persist token to third-party servers. | ||
* | ||
* Modify this method to associate the user's FCM InstanceID token with any server-side account | ||
* maintained by your application. | ||
* | ||
* @param token The new token. | ||
*/ | ||
public static void sendRegistrationToServer(String token) { | ||
// TODO: Implement this method to send token to your app server. | ||
DatabaseReference mDatabase; | ||
mDatabase = FirebaseDatabase.getInstance().getReference("users"); | ||
mDatabase.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("token").setValue(token); | ||
mDatabase.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("email").setValue(FirebaseAuth.getInstance().getCurrentUser().getEmail()); | ||
} | ||
|
||
/** | ||
* Create and show a simple notification containing the received FCM message. | ||
* | ||
* @param messageBody FCM message body received. | ||
*/ | ||
private void sendNotification(String messageBody) { | ||
Intent intent = new Intent(this, MainActivity.class); | ||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); | ||
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, | ||
PendingIntent.FLAG_ONE_SHOT); | ||
|
||
String channelId = getString(R.string.default_notification_channel_id); | ||
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); | ||
NotificationCompat.Builder notificationBuilder = | ||
new NotificationCompat.Builder(this, channelId) | ||
.setSmallIcon(R.drawable.app_logo) | ||
.setContentTitle(getString(R.string.fcm_message)) | ||
.setContentText(messageBody) | ||
.setAutoCancel(true) | ||
.setSound(defaultSoundUri) | ||
.setContentIntent(pendingIntent); | ||
|
||
NotificationManager notificationManager = | ||
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); | ||
|
||
// Since android Oreo notification channel is needed. | ||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { | ||
NotificationChannel channel = new NotificationChannel(channelId, | ||
"Channel human readable title", | ||
NotificationManager.IMPORTANCE_DEFAULT); | ||
notificationManager.createNotificationChannel(channel); | ||
} | ||
|
||
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters