Android应用关闭后,FCM推送通知无法正常工作

时间:2016-07-16 00:11:06

标签: java php android curl push-notification

好的,所以我到处寻找,我无法找到答案。 我已经在我的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;
}

2 个答案:

答案 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”应匹配。