- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我实现了 Firebase 并测试了 Firebase 通知。当应用程序在前台时,我没有遇到任何问题,我实现了一项扩展 FirebaseMessagingService 并在 onMessageReceived
中处理消息和数据的服务我在应用程序处于后台时遇到问题,我想发送一个通知来打开特定 Activity 并执行我计划要做的事情,而不仅仅是打开应用程序。
我按照 Firebase 指南中的描述进行了操作,但我无法启动特定 Activity 。
这里是 list :
<activity android:name=".BasicNotificationActivity">
<intent-filter>
<action android:name="OPEN_ACTIVITY_1" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
这里是 Firebase 控制台。我必须在这些字段中写什么才能打开我的“BasicNotificationActivity”?
最佳答案
这是这个问题的副本:Firebase FCM notifications click_action payload
但是这个问题的作者接受的答案只是说 Firebase 控制台不可能,但它是 - 有一个简单的解决方法。 This answer by 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);
}
}
在您的应用程序的启动器 Activity 中,调用一个方法来检查 onCreate()
和 onNewIntent()
中的任何新 Intent (onNewIntent()
仅在 Activity 以单顶标志启动时被调用而不是 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>
现在,当收到并单击通知时,它将打开您的 Activity 。如果您的应用程序在前台,它也会立即更改为 Activity - 最好询问用户是否想参加此 Activity (通过在 onMessageReceived()
中显示一个对话框) >).
关于android - Firebase 控制台 : How to specify click_action for notifications,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38111339/
我是一名优秀的程序员,十分优秀!