Я пытаюсь установить push-уведомления в моем приложении для определенных действий ("кому-то понравилось это", "кто-то прокомментировал это" и т.д.).
Я пытался следовать Google Guide здесь
Но когда я скопировал код, эта часть
String response = FirebaseMessaging.getInstance().send(message);
Выдал ошибку, сказав, что ожидает RemoteMessage
а не Message
. Я пытаюсь изменить его на RemoteMessage, но я не могу понять:
.setToken
.RemoteMessage.Builder()
Я просмотрел много руководств, но не могу найти ни одного, которые бы касались этого. Это новое изменение в API?
Лучший способ помочь мне - это пример с Kotlin нового сгенерированного сообщения, которое в ответ вызовет новое push-уведомление для получателя на основе токена (я почти уверен, что могу справиться с получением самостоятельно),
Спасибо!
Редактировать:
Я смог сделать так, чтобы он соответствовал шаблону, которым он был бы доволен, но я не могу отобразить уведомления.
Это функция, которую я использую для отправки уведомления:
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("[email protected]")
.setMessageId(Integer.toString(0))
.addData("my_message", "Hello World")
.addData("my_action", "SAY_HELLO")
.build()
)
}
})
}
Пользователь, который я userId
этой функции, является идентификатором firebase, и с его помощью я получаю самый последний токен приложения, которое использует пользователь. Я проверил, и эта часть работает, и я получаю взамен токен в формате, подобном этому
ecK86WRoAh4:APA91bGQWSesCptPF_nzfkmgDe-zOYYo2Cj4XT_NeNTVaBxQakbvauOpkVFd7DCRIugMCfso5SadEUtyTRvrhdCiBpKxGGMRgUYNsUhA24f9IkmxjL5dWD
Но сама функция не вызывает никаких уведомлений на другом устройстве (я использую два устройства, пытающихся получить одно, чтобы инициировать уведомление другим).
Установите идентификатор отправителя в конструкторе вашего RemoteMessage
, он должен выглядеть следующим образом:
RemoteMessage.Builder(token)
;
редактировать
вот метод, который я использую:
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());
}
builder
не вариант, ноBuilder
. Проблема в том, что когда я использую его, я получаю другую ошибку, говорящую «expected RemoreMessage but found RemoteMessage.Builder
build
в конце, хотя я все еще не могу отправить его. Я прилагаю свой текущий код. Скажите, пожалуйста, что мне не хватает? * edit: мой браузер только что обновился, и я увидел, что вы отредактировали свой ответ, просматривая его сейчас.