从firebase通知中打开特定活动

问题描述 投票:5回答:2

我将firebase通知集成到了我的应用程序中,但我想发送一个通知,打开一个特定的活动,按照我的计划做,而不仅仅是打开应用程序。比如通知会在用户点击它时访问Google Play商店。

我看到了一个代码Firebase console: How to specify click_action for notifications我使用但是在初始化变量cls时遇到错误。我尝试通过定义cls = null来解决,以清除错误。它无法使用click_action打开我指定的活动

public class ClickActionHelper { 
public static void startActivity(String className, Bundle extras, Context context){ 
Class cls=null; 
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); 
}     
}

我有什么问题吗?我如何让它工作?

android firebase notifications
2个回答
13
投票

如果要打开应用程序并执行特定操作[在后台运行时],请在通知有效内容中设置click_action并将其映射到要启动的活动中的intent过滤器。例如,将click_action设置为OPEN_ACTIVITY_1以触发如下所示的intent过滤器:

正如FCM文档中所建议的那样,请求后端以这样的形式发送JSON数据,

{
    "to": "some_device_token",

    "content_available": true,
    "notification": {
        "title": "hello",
        "body": "yo",
        "click_action": "OPEN_ACTIVITY_1" // for intent filter in your activity
    },

    "data": {
        "extra": "juice"
    }
}

并在您的清单文件中为您的活动添加intent-filter,如下所示

<intent-filter>
  <action android:name="OPEN_ACTIVITY_1" />
  <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

单击通知后,它将打开应用程序并直接进入您在click_action中定义的活动,在本例中为“OPEN_ACTIVTY_1”。在该活动中,您可以通过以下方式获取数据:

Bundle b = getIntent().getExtras();// add these lines of code to get data from notification
String someData = b.getString("someData");

请查看以下链接以获取更多帮助:

Firebase FCM notifications click_action payload

Firebase onMessageReceived not called when app in background

Firebase console: How to specify click_action for notifications


1
投票

我知道这个问题已经存在了一段时间,但无论如何我想展示我的解决方案。它比那些简单得多。所以现在我在徘徊,如果它的坏习惯。但它的工作原理:我使用有效负载json对象来存储一个整数:

JSONObject payload = data.getJSONObject("payload");
int destination = payload.getInt("click_action");

然后我只使用一个简单的switch语句来基于整数结果启动正确的活动:

Intent resultIntent;
switch(destination){
    case 1:
        resultIntent = new Intent(getApplicationContext(), UserProfileActivity.class);
        resultIntent.putExtra("message", message);
        break;
    default:
        resultIntent = new Intent(getApplicationContext(), MainActivity.class);
        resultIntent.putExtra("message", message);
        break;
}

简单。

© www.soinside.com 2019 - 2024. All rights reserved.