我已经在我的应用中实现了FCM通知系统,我的问题是只有在应用程序运行或在后台运行时才能正常工作,但是如果未出现通知,则我ve此代码
Manifest.xml
<service android:name="com.Ryuk.listenme.FirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
______________________________________________________________
myServer.php
function notify($tokens,$message)
{
$url = 'https://fcm.googleapis.com/fcm/send';
$fields = array(
'registration_ids' => $tokens,
'data' => $message
);
$headers = array(
'Authorization:key = mycode',
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($ch);
if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch));
}
curl_close($ch);
return $result;
}
______________________________________________________________
FirebaseMessagingServer.java //which works only in running/background
public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService
{
@Override
public void onMessageReceived(RemoteMessage remoteMessage)
{
showNotification(remoteMessage.getData().get("message"));
}
private void showNotification(String message)
{
Intent i = new Intent ();
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,i,PendingIntent.FLAG_ONE_SHOT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setAutoCancel(true)
.setContentTitle("Test FCM")
.setContentText(message)
.setSmallIcon(R.drawable.common_google_signin_btn_icon_dark)
.setContentIntent(pendingIntent);
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(0,builder.build());
}
}
我不知道问题是否在我的应用程序中或以我的消息格式(以PHP为单位(,我在Google上尝试了很多解决方案,但是它们一年前很现实,它们不起作用
一旦应用程序关闭,您将不会收到背景意见。这包括GCM/FCM消息。
"从Android 3.1开始,系统的软件包管理器会跟踪处于停止状态的应用程序,并提供了一种从背景过程和其他应用程序中控制其启动的方法。"
"请注意,系统将FLAG_EXCLUDE_STOPPED_PACKAGE添加到所有广播意见中。它这样做是为了防止从无意间或不必要地启动停止应用程序的组件中从背景服务中广播。"https://developer.android.com/about/versions/android-3.1.html#launchcontrols
GCM推动通知在App Force停止之后起作用?
有趣的事实,三星设备经常使用"优化应用程序"功能杀死背景应用程序。这可能会影响您的应用程序。有关更多信息,请参见此处 - Samsung"应用优化"。功能在3天后杀死背景申请
根据文档。
当您的应用在后台时,Android指示通知 消息到系统托盘。用户点击通知打开 默认情况下的应用启动器。
这包括包含通知和数据的消息 有效载荷。在这些情况下,通知已发送到设备的 系统托盘,数据有效载荷已在 启动器活动的意图。
当您进入background
时,FCM将根据Notification Poreload中的信息在系统托盘中显示通知。标题,消息和图标是从通知有效负载中获取的。有关更多信息,请参阅此问题。
我已经解决了它,这是我手机中的设置,可防止通知