【发布时间】:2017-07-30 15:55:03
【问题描述】:
我正在使用 firebase 云消息向我的应用程序发送通知。当我的应用程序在前台并切换到另一个应用程序时我收到通知(我在后台运行的应用程序未关闭)。 但是当我从最近使用的应用程序中删除时。我没有收到通知。 我也得到了令牌 ID。问题是从最新使用的应用中删除应用时没有收到通知。
Android 清单文件: 内部应用
<service
android:name="com.mysite.android.abc.service.MyFirebaseMessagingService"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED"
>
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<!-- [END firebase_service] -->
<!-- [START firebase_iid_service] -->
<service
android:name="com.mysite.android.abc.service.MyFirebaseInstanceIDService"
>
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
<!-- [END firebase_iid_service] -->
<receiver
android:name=".service.FirebaseDataReceiver"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</receiver>
MyFirebaseInstanceIDService:
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
@Override
public void onTokenRefresh() {
super.onTokenRefresh();
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
// 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);
}
}
MyFirebaseMessagingService:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private NotificationUtils notificationUtils;
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived( remoteMessage );
if(remoteMessage==null){
return;
}
if (remoteMessage.getNotification()!=null) {
handleNotification( remoteMessage.getNotification().getBody() );
}
if(remoteMessage.getData().size()>0){
try {
JSONObject jsonObject=new JSONObject( remoteMessage.getData().toString() );
handleDataMessage( jsonObject );
}catch (Exception e){
e.printStackTrace();
}
}
}
private void handleNotification(String message){
if(!NotificationUtils.isAppIsInBackground( getApplicationContext() )){
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{
}
}
private void handleDataMessage(JSONObject jsonObject){
Log.e("GGGGG mm",jsonObject.toString());
try {
JSONObject data=jsonObject.getJSONObject( "data" );
String title=data.getString( "title" );
String message=data.getString( "message" );
JSONObject payload = data.getJSONObject("payload");
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(), Dashboard.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) {
e.printStackTrace();
}
}
/**
* 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 | Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
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 | Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
notificationUtils.showNotificationMessage(title, message, timeStamp, intent, imageUrl);
}
}
【问题讨论】:
-
当您从堆栈中删除应用程序时,您可以在
luncher活动类中收到通知。 -
没有。我没有得到。
-
@Shailesh 这用于通知应用程序问题。我的问题是没有收到通知
标签: android firebase push-notification firebase-cloud-messaging