我已经创建了Android应用程序来接收来自服务器的推送通知,但它不起作用。
当应用程序处于前台时,它可以完美运行。但是当我们强制从系统托盘关闭应用程序时,它不起作用。
以下是我发送给FCM的json代码。
{"to":"/topics/global","data":{"title":"Title","body":"Body"}}
下面是我的安卓功能
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
Log.d("Msg", "Message received ["+remoteMessage+"]");
Map<String, String> data = remoteMessage.getData();
DatabaseHandler db = new DatabaseHandler(getApplicationContext());
db.addData(data.get("body"));
Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class);
resultIntent.putExtra("message", data.get("body"));
showNotificationMessage(getApplicationContext(), data.get("title"), data.get("body"), "", resultIntent);
}
下面是显示通知的代码。
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);
notificationUtils.showNotificationMessage(title, message, timeStamp, intent);
}
我找不到任何问题,任何人都可以帮我。
提前非常感谢你。
编辑:
我已经通过更换手机解决了我的问题,三星设备代码工作正常,但它与 MI 设备本身有关。
我也有MI设备的解决方案,请使用以下步骤启用自动启动该应用程序。
转到设置 -->权限 -->自动启动。从那里,选择要接收通知的应用程序,然后切换开关将其打开。
根据文档,通知到达时有两种可能性。
- 应用程序位于前台。
您将在onMessageReceived
中收到通知,并且可以通过此方法获取数据。您需要在系统托盘中生成本地通知。
处理通知
您已经按照相关内容完成了此代码。
- 应用程序在后台。
您会在系统托盘中收到通知。您无需在此处生成通知。您将在启动器活动的意图中获取数据。
处理通知
这是启动器活动的代码
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
if (intent == null || intent.getExtras() == null) {
// your code to handle if there is no notification
} else {
// handle notification
String body = intent.getStringExtra("body");
String title = intent.getStringExtra("title");
//TODO your code to open activity as per notification
}
}
我已经这样做了,它对我有用。
从这里,
在后台时,应用会在通知托盘中接收通知有效负载,并且仅在用户点击通知时处理数据有效负载。
由此,
这包括同时包含通知和数据负载的消息(以及从通知控制台发送的所有消息(。在这些情况下,通知将传递到设备的系统托盘,并且数据有效负载将在启动器活动的意图的附加内容中传递
您可能会从接收消息教程中获得完整的帮助