簡體   English   中英

使用Firebase Cloud Messaging 的RemoteMessage 時如何指定收件人令牌?

[英]How do I specify the recipient token when using RemoteMessage of Firebase Cloud Messaging?

我正在嘗試在我的應用程序中為某些操作建立推送通知(“有人喜歡你的這個”,“有人對此發表評論”等)。

我試着在 這里遵循谷歌的指南

但是當我復制代碼時,這部分

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

給出一個錯誤,說它期待RemoteMessage而不是Message 我正在嘗試將其更改為 RemoteMessage,但我無法理解:

  1. 我在哪里指定收件人的令牌? 我找不到相當於.setToken的東西。
  2. RemoteMessage.Builder()的括號內放什么

我已經閱讀了很多手冊,但找不到任何解決它的方法。 是 API 的新變化嗎?

幫助我的最好方法是使用 Kotlin 舉例說明一條新生成的消息——作為響應,該消息會根據令牌為收件人觸發新的推送通知(我很確定我可以自己處理接收) .

謝謝!

編輯:

我能夠使它符合它會滿意的模式,但我無法顯示通知。

這是我用來發送通知的功能:

 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 uid,並使用它獲取用戶正在使用的應用程序的最新令牌。 我已經檢查過並且該部分有效並且我以類似於此的格式返回令牌

ecK86WRoAh4:APA91bGQWSesCptPF_nzfkmgDe-zOYYo2Cj4XT_NeNTVaBxQakbvauOpkVFd7DCRIugMCfso5SadEUtyTRvrhdCiBpKxGGMRgUYNsUhA24f9IkmxjL5dWD

但是該功能本身不會在另一台設備中引發任何通知(我正在使用兩台設備試圖讓一台設備與另一台設備觸發通知)。

在您的RemoteMessage構建器構造函數中設置發件人 ID,它應該如下所示:

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());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM