这是此问题的副本:Firebase FCM 通知 click_action 有效负载
但是这个问题的作者接受的答案只是表明使用 Firebase 控制台是不可能的,但它是 - 有一个简单的解决方法。diidu对同一问题的回答解释了我将使用的解决方法。
更新:
详细说明他的答案:
添加一个辅助类(或startActivity()
以某种方式实现方法):
public class ClickActionHelper {
public static void startActivity(String className, Bundle extras, Context context){
Class cls;
try {
cls = Class.forName(className);
}catch(ClassNotFoundException e){
//means you made a wrong input in firebase console
}
Intent i = new Intent(context, cls);
i.putExtras(extras);
context.startActivity(i);
}
}
在应用程序的启动器活动中,调用一个方法来检查其中的任何新意图(仅在onCreate()
使用单顶标志启动 Activity 时才调用)onNewIntent()
:onNewIntent()
onCreate()
@Override
protected void onCreate(Bundle bundle) {
[...]
checkIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
[...]
checkIntent(intent);
}
public void checkIntent(Intent intent) {
if (intent.hasExtra("click_action")) {
ClickActionHelper.startActivity(intent.getStringExtra("click_action"), intent.getExtras(), this);
}
}
并在onMessageReceived()
:
public void onMessageReceived(RemoteMessage remoteMessage) {
Map<String, String> data = remoteMessage.getData();
if (data.containsKey("click_action")) {
ClickActionHelper.startActivity(data.get("click_action"), null, this);
}
}
要使用 firebase 控制台发送通知,请将键值对作为自定义数据,如下所示:
Key: click_action
Value: <fully qualified classname of your activity>
现在,当收到并单击通知时,它将打开您的活动。如果您的应用程序在前台,它也将立即更改为活动 - 询问用户是否想进入此活动可能会很好(通过在 中显示一个对话框onMessageReceived()
)。