意图特定活动时,推送通知中点击。

问题描述:

不就通知点击打开特定活动时,应用程序在后台/没有运行意图特定活动时,推送通知中点击。

通知点击只有当应用程序被打开开始指定活动和通知点击进行。如果应用程序处于后台/未运行状态并执行通知单击,则应用程序的MainActivity将打开。简而言之,它就像应用程序在活动堆栈后正常打开,而不是在PendingIntent中打开指定的活动。

火力地堡实例ID服务:

package com.example.tamzid.pushnotification; 

import android.util.Log; 
import com.google.firebase.iid.FirebaseInstanceId; 
import com.google.firebase.iid.FirebaseInstanceIdService; 

public class MyAndroidFirebaseInstanceIdService extends 
FirebaseInstanceIdService { 

private static final String TAG = "MyAndroidFCMIIDService"; 

@Override 
public void onTokenRefresh() { 
    //Get hold of the registration token 
    String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 
    //Log the token 
    Log.d(TAG, "Refreshed token: " + refreshedToken); 
} 
private void sendRegistrationToServer(String token) { 
    //Implement this method if you want to store the token on your server 
} 
} 

火力地堡消息服务:

package com.example.tamzid.pushnotification; 

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.support.v4.app.NotificationCompat; 
import android.util.Log; 
import com.google.firebase.messaging.FirebaseMessagingService; 
import com.google.firebase.messaging.RemoteMessage; 

public class MyAndroidFirebaseMsgService extends FirebaseMessagingService  
{ 
private static final String TAG = "MyAndroidFCMService"; 
@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    //Log data to Log Cat 
    Log.d(TAG, "From: " + remoteMessage.getFrom()); 
    Log.d(TAG, "Notification Message Body: " +  
remoteMessage.getNotification().getBody()); 
    //create notification 
    createNotification(remoteMessage.getNotification().getBody()); 
} 

private void createNotification(String messageBody) { 
    Intent intent = new Intent(this , ResultActivity. class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    PendingIntent resultIntent = PendingIntent.getActivity(this , 0, 
intent, 
      PendingIntent.FLAG_ONE_SHOT); 

    Uri notificationSoundURI = 
RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    NotificationCompat.Builder mNotificationBuilder = new 
NotificationCompat.Builder(this) 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setContentTitle("Android Tutorial Point FCM Tutorial") 
      .setContentText(messageBody) 
      .setAutoCancel(true) 
      .setSound(notificationSoundURI) 
      .setContentIntent(resultIntent); 

    NotificationManager notificationManager = 
      (NotificationManager) 
getSystemService(Context.NOTIFICATION_SERVICE); 

    notificationManager.notify(0, mNotificationBuilder.build()); 
} 
} 

的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.tamzid.pushnotification"> 

<application 
    android:name="android.support.multidex.MultiDexApplication" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".ResultActivity"></activity> 
    <service android:name=".MyAndroidFirebaseMsgService"> 
     <intent-filter> 
      <action android:name="com.google.firebase.MESSAGING_EVENT" /> 
     </intent-filter> 
    </service> 
    <service android:name=".MyAndroidFirebaseInstanceIdService"> 
     <intent-filter> 
      <action android:name="com.google.firebase.INSTANCE_ID_EVENT" 
/> 
     </intent-filter> 
    </service> 

</application> 

</manifest> 
+2

您使用的GetNotification(),它workd只有当应用程序在前台。你需要使用getData()来做到这一点 –

+2

当应用程序在后台,你的public void onMessageReceived(RemoteMessage remoteMessage)永远不会调用。系统处理通知,因此您无法在此指定自定义活动。如果你使用Data(),那么你可以做任何你想要的东西 –

+0

oky,先生...... –

尝试使用的remoteMessage.getData()代替remoteMessage.getNotification()

使用remoteMessage.getNotification():如果邮件包含 通知有效载荷。

使用remoteMessage.getData():如果消息包含 数据有效载荷。

更新onMessageReceived()如下:

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 

    // Check if message contains a data payload. 
    if (remoteMessage.getData().size() > 0) 
    { 
     //create notification 
     createNotification(remoteMessage.getData().toString()); 
    } 
}