好的,所以我到处寻找,我无法找到答案。 我已经在我的Android应用程序中实现了推送通知,并且在应用程序处于活动状态(前景或背景)时一切正常,但是如果我关闭应用程序,我将停止接收通知。 这是我发送通知的PHP代码。
public static function sendNotification($token){
$url = 'https://fcm.googleapis.com/fcm/send';
$fields = array(
'notification' => array("title" => "Test","body" => "Test Message","icon" => "default","sound" => "default"),
"data" => "test message",
'to' => $token
);
$headers = array(
'Authorization:key = AIzaSyAKHM3MoMACjmeVK46TDg8-rTj1KoVjzWs',
'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) {
throw new errorSendingNotification();
}
curl_close($ch);
// Result returns this
// {"multicast_id":8978533958735781479,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1468627796530714%7c0e4bee7c0e4bee"}]}
return $result;
}
答案 0 :(得分:5)
我遇到了同样的问题。这帮助了我。
请从有效负载中删除“通知”密钥,并仅提供“数据”密钥。
应用程序仅在应用程序位于前台时处理通知消息,但即使应用程序处于后台或关闭,它也会处理数据消息。
如果应用程序位于前台onMessageReceived,则处理数据和通知消息。如果应用程序已关闭或在后台仅将 data 消息传递给onMessageReceived。 通知消息未传递给onMessageReceived。所以你无法自定义你的消息。
最好从有效负载中删除通知密钥。
答案 1 :(得分:0)
一种解决方案就像AmAnDroid一样。
第二个解决方案是: 不幸的是,这是SDK 9.0.0-9.6.1中Firebase通知的限制。当应用程序在后台时,启动器图标将从清单中使用(具有必要的Android着色),用于从控制台发送的消息。
但是,使用SDK 9.8.0,您可以覆盖默认值!在AndroidManifest.xml中,您可以设置以下字段来自定义图标和颜色:
在menifest中添加以下代码:
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/com_facebook_button_send_icon_blue" />
<meta-data android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/bt_blue_pressed" />
车身/有效载荷:
{ "notification":
{
"title": "Your Title",
"text": "Your Text",
"click_action": "MAIN_ACTIVITY" // should match to your intent filter
},
"data":
{
"keyname": "any value " //you can get this data as extras in your activity and this data is optional
},
"to" : "to_id(firebase refreshedToken)"
}
在您的活动中添加以下代码(intent-filter)之后:
<activity
android:name="MainActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="MAIN_ACTIVITY" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
确保你的Body / Payload的“click_action”:“MAIN_ACTIVITY”和intent-filter的android:name =“MAIN_ACTIVITY”应匹配。