Служба сообщений Firebase никогда не вызывает onMessageReceived () в новых версиях - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь отправить данные о действии щелчка с уведомлением для обработки события onClick для него, но, к сожалению, приложение не получает данных через onMessageReceived (). Я перепробовал много вещей, но все тщетно.

Вот мой код:

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);


     String notification_title = 
remoteMessage.getNotification().getTitle();
    String notification_message = 
remoteMessage.getNotification().getBody();
    String click_action = 
remoteMessage.getNotification().getClickAction();
    String from_user_id = remoteMessage.getData().get("from_user");
    Log.v("user id", from_user_id);
    if(from_user_id!= null){
        Toast.makeText(this, from_user_id, Toast.LENGTH_SHORT).show();
    }
    NotificationCompat.Builder mBuilder = new 
NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentTitle(notification_title)
            .setContentText(notification_message)
            .setPriority(NotificationCompat.PRIORITY_DEFAULT);

    Intent resultIntent = new Intent(click_action);
    resultIntent.putExtra("user_id", from_user_id);
    Log.v("user id", from_user_id);
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    stackBuilder.addNextIntentWithParentStack(resultIntent);
    PendingIntent resultPendingIntent =
            stackBuilder.getPendingIntent(0, 
PendingIntent.FLAG_UPDATE_CURRENT);
    mBuilder.setContentIntent(resultPendingIntent);

    int mNotificationID = (int)System.currentTimeMillis();

    NotificationManager mNotifyManger = 
(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    mNotifyManger.notify(mNotificationID, mBuilder.build());

    }

а вот мой мэйнфест:

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

и это мой выпускник:

implementation 'com.google.firebase:firebase-core:16.0.4'
implementation 'com.google.firebase:firebase-database:16.0.3'
implementation 'com.google.firebase:firebase-storage:16.0.3'
implementation 'com.google.firebase:firebase-auth:16.0.5'
implementation 'com.firebaseui:firebase-ui-database:4.2.1'
implementation 'com.google.firebase:firebase-messaging:17.3.4'

Отредактировано: Вот данные, которые я ожидаю:

const deviceToken = 
admin.database().ref(`/Users/${user_id}/device_token`).once('value');
return deviceToken.then(result => {
if (!result || !result.exists){throw new Error("Profile doesn't exist")}
const token_id = result.val();
const payload = {
    notification: {
        title: "New Friend Request",
        body: `${userName} has sent you a Friend Request`,
        icon: "default",
        click_action: "com.example.alaa.lapitchatapp.Target_Notification"

    },
    data:{
        from_user: from_user_id
    }
};

Ответы [ 4 ]

0 голосов
/ 10 ноября 2018

Я нашел ответ на свой вопрос после того, как слишком много копался в документации по firebase.

Вы найдете это там: Служба сообщений Firebase не вызывается, но только один раз

Спасибо всем.

0 голосов
/ 07 ноября 2018

Переместить часть уведомления в данные. Если у вас есть настройка уведомлений из запроса, FCM использует системный трей уведомлений для отображения уведомлений, которые вы не можете контролировать, с другой стороны, если вам нужно обработать push-ответ, вам следует избегать использования части уведомлений в запрос

const payload = {
  data:{
    from_user: from_user_id,
    title: "New Friend Request",
    body: `${userName} has sent you a Friend Request`,
    icon: "default",
    click_action: "com.example.alaa.lapitchatapp.Target_Notification"
  }
};
0 голосов
/ 07 ноября 2018

Во-первых, передаете ли вы идентификатор базы вашего устройства в полезную нагрузку? Если да, пожалуйста, обновите упомянутое тело. Я там этого не вижу. Ваша полезная нагрузка должна иметь идентификатор Firebase примерно такой:

"registration_ids":[
  "your device's firebase ID"
]

или

"to":"your device's firebase ID"

или

"token":"your device's firebase ID"

Во-вторых, я не вижу смысла в этом коде:

if (true) {
        Log.d(TAG, "Message data payload: there is not a problem");
    } else {
        // Handle message within 10 seconds
     Log.d(TAG, "Message data payload: there is a problem");
    }

Какой смысл в другом операторе if, который всегда верен?

В-третьих, значение действия щелчка, которое вы указали в полезной нагрузке - com.example.alaa.lapitchatapp.Target_Notification Это класс, который вы пытаетесь открыть при нажатии на уведомление?

0 голосов
/ 07 ноября 2018

Если ваш RemoteMessage содержит notification ключ onMessageReceived вызывается только если ваше приложение в фоновом режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...