Уведомление Firebase успешно отправлено через CURL и консоль Firebase, но не получено на устройстве - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь отправить push-уведомление на устройство Android с использованием устаревшего протокола сервера приложений. Уведомление было отправлено успешно в соответствии с ответом, но я не получил ничего на моем устройстве Android. Я также попытался отправить уведомление с помощью консоли Firebase, и там также отображается сообщение об успешной отправке, но снова я ничего не получил.

Эта проблема обсуждалась в следующем ответе Уведомление Firebase не получено на устройство при отправке через cURL / PHP , но я не допустил ошибок, указанных в ответах здесь.

Это запрос, который я сделал

 curl -X POST 
-H "Authorization:key=MyAuthorizationKey" 
-H "Content-Type: application/json" 
-d '{ "message": { "notification": { 
                       "title": "FCM Message", 
                        "body": "This is an FCM Message", },
      "to": "MyDeviceToken"}
}' https://fcm.googleapis.com/fcm/send 

Это ответ, который я получил

{"multicast_id":8835070472349844293,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1555418431449800%06445bacf9fd7ecd"}]}

Мое приложение не работало на переднем плане, когда был сделан этот запрос. Таким образом, уведомление должно доставляться и отображаться службами Google, но этого не происходит.

Вот мой код файла манифеста:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.srishti.elderly">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".SignUp"
            android:label="SignUp" />
        <activity
            android:name=".SignIn"
            android:label="SignIn" />

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

        </service>

        <activity android:name=".Home"
            android:label="Home"></activity>

        <meta-data
            android:name="com.google.firebase.messaging.default_notification_icon"
            android:resource="@drawable/ic_launcher_background"/>
        <meta-data
            android:name="com.google.firebase.messaging.default_notification_color"
            android:resource="@color/colorAccent"/>

    </application>

</manifest>

А это моя функция onMessageReceived

 public void onMessageReceived(RemoteMessage remoteMessage) {


        Log.d(TAG, "on message received");

        final Context context = this;
        Intent intent = new Intent(this, MainActivity.class);
        final PendingIntent pIntent = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), intent, 0);


        Notification noti = new Notification.Builder(this)
                .setContentTitle("FTest")
                .setContentText("Firebabse notification test")
                .setSmallIcon(R.drawable.ic_launcher_background)
                .setContentIntent(pIntent)
                .build();


        NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0, noti);
    }

Обновление:

Это новый json, с которого я пытался отправить его:

curl -X POST 
-H "Authorization:key=Authorizationkey" 
-H "Content-Type: application/json" 
-d '{ 
     "data": { "title": "FCM Message", "body": "This is an FCM Message" }, 
     "to": "devicetoken"
}' https://fcm.googleapis.com/fcm/send 

Обновление: Возникла проблема с моим устройством, когда я запускал его на другом работающем устройстве. Спасибо.

1 Ответ

1 голос
/ 16 апреля 2019

Проблема в том, что вы отправляете сообщение, которое работает, только когда приложение находится на переднем плане, чтобы оно работало, когда приложение находится в фоновом режиме, вы должны использовать данные, попробуйте эту форму:

{
  "data": {
      "title":"FCM Message", 
      "Body":"This is an FCM Message"            
  }, 
 "to" : "devicetoken"
}  

Пояснение:

  • уведомление - сообщения, которые отправляются непосредственно в трей уведомлений Android, только если ваше приложение находится в фоновом режиме / уничтожено или доставляется в метод onMessageReceived (), если ваше приложение находится на переднем плане.

  • Полезная нагрузка данных - Неважно, находится ли ваше приложение в фоновом режиме, в фоновом режиме или уничтожено, эти сообщения всегда будут доставляться в метод onMessageReceived ().

...