Php 应用程序在前台时未调用Firebase onMessageReceived

Php 应用程序在前台时未调用Firebase onMessageReceived,php,android,firebase,firebase-cloud-messaging,Php,Android,Firebase,Firebase Cloud Messaging,我已经清楚地阅读了很多关于firebase推送通知行为的文档。当我的应用处于后台但在应用程序处于前台时,我可以在系统托盘上看到通知,但不会触发onMessageCeved回调。我可以查看在我的应用程序上收到的消息的日志。我尝试过使用数据负载和不使用应用服务器的数据负载进行呼叫。我的应用服务器正在使用php脚本触发fcm API。下面是我正在使用的php脚本 $url = 'https://fcm.googleapis.com/fcm/send'; $fields = array(

我已经清楚地阅读了很多关于firebase推送通知行为的文档。当我的应用处于后台但在应用程序处于前台时,我可以在系统托盘上看到通知,但不会触发
onMessageCeved
回调。我可以查看在我的应用程序上收到的消息的日志。我尝试过使用数据负载和不使用应用服务器的数据负载进行呼叫。我的应用服务器正在使用php脚本触发fcm API。下面是我正在使用的php脚本

  $url = 'https://fcm.googleapis.com/fcm/send';
  $fields = array(
            'registration_ids' => $registatoin_ids,
     'notification' => array( "title"=>$title, "body" => $notification_message ,"click_action"  => $click_action,'color' => "#74BCEE",'icon' => "school_logo"));
      $headers = array(
            'Authorization: key='xxxxxxxxx',
            'Content-Type: application/json'
        );

        // Open connection
        $ch = curl_init();

        //echo "here";exit;
        // Set the url, number of POST vars, POST data
        curl_setopt($ch, CURLOPT_URL, $url);

        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        // Disabling SSL Certificate support temporarly
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));

        // Execute post
        $result = curl_exec($ch);
        if ($result === FALSE) {
            //die('Curl failed: ' . curl_error($ch));
            curl_close($ch);
            return;

        }
        print_r($result);
以下是我在Android应用程序中使用的服务

    <service
    android:name="service.MyFirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

<service
    android:name="service.MyFirebaseInstanceIdService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
    </intent-filter>
</service>

我也有同样的问题。我的问题是

标记位于清单文件中的
标记之外。当我放入
标签时,问题就解决了。

我也遇到了同样的问题。我的问题是

标记位于清单文件中的
标记之外。当我输入
标记时,问题就解决了。

当您说您尝试使用数据有效负载时,您的意思是您在PHP代码中的JSON中用
数据
替换了
通知
字段吗?即使这样,当你的应用程序在前台时,你的onMessageReceived方法也不会被调用?我怀疑问题出在你的AndroidManifest.xml中。尝试将“service.myFirebaseInstancedService”替换为“.service.myFirebaseInstancedService”(注意开头的点)。请参阅@GeorgeLBA中的“android:name”部分,我尝试将通知和数据负载一起发送。在有数据负载和无数据负载的情况下,当应用程序位于前台时,不会调用onMessageReceived。我可以看到里面收到消息的日志FirebaseMessagingService@DiegoGiorgini我已将包名重新组织为单个文件夹,以便可以直接使用该服务。在清单文件中。你是什么意思?名称必须以“.”开头,如果它们与包名相关,或者当您说您尝试使用数据负载时,名称应该包含完整的包名。您的意思是您在PHP代码中的JSON中将
通知
字段替换为
数据
?即使这样,当你的应用程序在前台时,你的onMessageReceived方法也不会被调用?我怀疑问题出在你的AndroidManifest.xml中。尝试将“service.myFirebaseInstancedService”替换为“.service.myFirebaseInstancedService”(注意开头的点)。请参阅@GeorgeLBA中的“android:name”部分,我尝试将通知和数据负载一起发送。在有数据负载和无数据负载的情况下,当应用程序位于前台时,不会调用onMessageReceived。我可以看到里面收到消息的日志FirebaseMessagingService@DiegoGiorgini我已将包名重新组织为单个文件夹,以便可以直接使用该服务。在清单文件中。你是什么意思?如果名称与包名相关,则名称必须以“.”开头,否则应包含为我修复的完整包名。谢谢@JamalI对此非常着迷,多次检查应用程序,切换到不同的模拟器。谢谢你救了我一天,救命恩人。但愿我早一点找到这个,那就帮我修好了。谢谢@JamalI对此非常着迷,多次检查应用程序,切换到不同的模拟器。谢谢你救了我一天,救命恩人。但愿我早点找到这个。