我正在检查Firebase Cloud Messaging以发送通知.已经实现了它,并在应用程序处于打开状态时接收通知.但如果我关闭应用程序,它不再发出通知.对此有什么解决方案吗?
码:
WebRequest wRequest;
wRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send");
wRequest.Method = "post";
wRequest.ContentType = " application/json;charset=UTF-8";
wRequest.Headers.Add(string.Format("Authorization: key={0}", AppId));
wRequest.Headers.Add(string.Format("Sender: id={0}", SenderId));
string postData = "{\"registration_ids\":[\"" + regIds + "\"], \"data\": "+ value +"}";
Byte[] bytes = Encoding.UTF8.GetBytes(postData);
wRequest.ContentLength = bytes.Length;
Stream stream = wRequest.GetRequestStream();
stream.Write(bytes, 0, bytes.Length);
stream.Close();
WebResponse wResponse = wRequest.GetResponse();
Run Code Online (Sandbox Code Playgroud)
消息服务 -
public class MessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Map<String, String> data = remoteMessage.getData();
sendNotification(data);
}
public void showMessage(Map<String, String> …Run Code Online (Sandbox Code Playgroud) notifications android firebase firebase-cloud-messaging firebase-notifications
这款手机是OnePlus3T.氧气OS构建为4.1.6.当应用程序在后台但在内存中处于前台时,应用程序会收到通知.但是,当应用程序不在内存中时,不会收到通知,即从内存中刷出.在具有Android OS版本4.2,5.1.1,6.0.1,7.1.1的其他设备上收到通知.Latage OS甚至应用程序不在内存中.
请提出一些建议.提前致谢.
当仅使用数据负载关闭应用程序时,Firebase 推送在某些设备上不起作用。请参阅此线程:https : //github.com/firebase/quickstart-android/issues/41
我知道当应用程序被刷卡杀死时,一些 OEM 会杀死应用程序的所有服务,这些服务直接影响 FirebbaseMessagingService 并且由于这个 onMessageReceived() 方法从未被调用。我也尝试过使用高优先级 FCM,但遗憾的是没有成功。以下是我遇到问题的手机:OnePlus、联想、华为。
目前,我正在使用 OnePlus 5 进行测试,当我将电池设置更改为“不优化”时,推送通知开始工作。
我杀死了应用程序并运行dumpsys package MY-PACKAGE | grep stopped命令,我发现应用程序没有停止。它显示stopped=false. 这意味着应用程序正在运行。
推送通知的概念是在应用程序关闭时通知用户,但目前我们无法做到。
任何建议我该如何解决这个问题?
我有一个移动应用程序,它注册到c2dm服务器.
我有一台服务器向我的应用程序发送消息,以发送通知.服务器从谷歌c2dm收到ok结果代码.
在LogCat中我看到我的应用程序收到消息但立即产生我在帖子中的错误.而且我创建的通知也被忽略了.
08-10 16:28:09.157: W/GTalkService(13962): [DataMsgMgr] broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE pkg=com.example.c2dmclient (has extras) }
Run Code Online (Sandbox Code Playgroud)
我不懂.我的清单文件是:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.c2dmclient"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<permission android:name="com.example.c2dmclient.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="com.example.c2dmclient.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<!-- Keeps the processor from sleeping when a message is received. -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name=".C2DMRegistrationReceiver" …Run Code Online (Sandbox Code Playgroud)