Android FCM显示通过触发服务通知
Android FCM显示通过触发服务通知
我尝试在我的应用中实现 FCM,但是遇到了一个问题。每当我发送通知时,它只显示默认通知,而没有调用我的自定义代码。我做错了什么?
以下是相关的服务:
这是我的 Java 代码:
public class MyFirebaseMessagingService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { Log.d("MyFirebaseMessaging", "GotMessage"); WSListener.sendEvent(this, "Push"); } }
当我在设备上收到通知时,日志中显示如下内容:
I/SendBroadcastPermission: action:com.google.android.gms.gcm.ACTION_SCHEDULE, mPermissionType:0 I/SendBroadcastPermission: action:com.google.android.gms.gcm.ACTION_SCHEDULE, mPermissionType:0
这是我发送通知的方式:
function send_gcm_notify($reg_id, $message, $url, $key) { $fields = array( 'to' => $reg_id , 'priority' => "high", "notification" => array("body"=>$message), 'data' => array( "url"=> $url) ); $headers = array( 'Content-Type: application/json', 'Authorization: key=' . $key ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://fcm.googleapis.com/fcm/send"); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); $result = curl_exec($ch); if ($result === FALSE) { //die('Problem occurred: ' . curl_error($ch)); } curl_close($ch); return $result; }
当然,我已经测试过服务的路径是正确的。
问题原因:
在Android FCM中,当应用程序处于后台时,如果希望服务器的内容和通知同时显示,必须从服务器发送负载到"data"中。
解决方法:
参考以下链接中的解决方法:How to handle Android FCM Messages when application is in Background with data payload?