Как указать токен получателя при использовании RemoteMessage из Firebase Cloud Messaging? - PullRequest
1 голос
/ 18 апреля 2019

Я пытаюсь установить push-уведомления в моем приложении для определенных действий («кому-то понравилось это», «кто-то прокомментировал» и т. Д.).

Я пытался следовать руководству Google здесь

Но когда я скопировал код, эта часть

String response = FirebaseMessaging.getInstance().send(message);

Выдал ошибку, сказав, что ожидает RemoteMessage, а не Message. Я пытаюсь изменить его на RemoteMessage, но не могу понять:

  1. Где мне указать токен получателя? Я не могу найти эквивалент .setToken.
  2. Что поставить в скобки RemoteMessage.Builder()

Я изучил много руководств, но не могу найти ни одного, которые бы касались этого. Это новое изменение в API?

Лучший способ помочь мне - это пример с Kotlin нового сгенерированного сообщения, которое в ответ вызовет новое push-уведомление для получателя на основе токена (я почти уверен, что смогу обработать получение сам).

Спасибо!

Edit:

Я смог сделать так, чтобы он соответствовал шаблону, которым он был бы доволен, но я не могу отобразить уведомления.

Я использую эту функцию для отправки уведомления:

 fun sendCloudMessage(userId: String) {

        val receiverRef = FirebaseDatabase.getInstance().getReference("/users/$userId/services/firebase-token")

        receiverRef.addListenerForSingleValueEvent(object : ValueEventListener {
            override fun onCancelled(p0: DatabaseError) {

            }

            override fun onDataChange(p0: DataSnapshot) {

                val registrationToken = p0.getValue(String::class.java)

                Log.d("tokencomplete", p0.toString())
                Log.d("tokenonly", registrationToken)

                val fm = FirebaseMessaging.getInstance()

                fm.send(
                    RemoteMessage.Builder("$registrationToken@gcm.googleapis.com")
                        .setMessageId(Integer.toString(0))
                        .addData("my_message", "Hello World")
                        .addData("my_action", "SAY_HELLO")
                        .build()
                )
            }

        })

    }

userId, который я передаю этой функции, является идентификатором firebase, и с его помощью я получаю самый последний токен приложения, которое использует пользователь. Я проверил, и эта часть работает, и я получаю взамен токен в формате, подобном этому

ecK86WRoAh4:APA91bGQWSesCptPF_nzfkmgDe-zOYYo2Cj4XT_NeNTVaBxQakbvauOpkVFd7DCRIugMCfso5SadEUtyTRvrhdCiBpKxGGMRgUYNsUhA24f9IkmxjL5dWD

Но сама функция не вызывает никаких уведомлений на другом устройстве (я использую два устройства, пытаясь заставить одно вызвать другое уведомление).

1 Ответ

0 голосов
/ 18 апреля 2019

Установите идентификатор отправителя в конструкторе RemoteMessage, он должен выглядеть следующим образом:

RemoteMessage.Builder(token);

edit

Вот метод, который я использую:

public void sendMessage (final String data) {
FirebaseMessaging fm = FirebaseMessaging.getInstance();

String token = FirebaseInstanceId.getInstance().getToken();
String msgID = DigestUtils.sha1Hex(token + System.currentTimeMillis());
String SENDER_ID = "someID";

RemoteMessage.Builder RMBuilder =
new RemoteMessage.Builder(SENDER_ID + "@gcm.googleapis.com");
RMBuilder.setMessageId(msgID);

Map<String, Object> mapData = Utils.jsonToMap(data);

for (Map.Entry<String, Object> entry : mapData.entrySet()) {
    RMBuilder.addData(entry.getKey(), entry.getValue().toString());
}

fm.send(RMBuilder.build());
}
...