iT邦幫忙

2021 iThome 鐵人賽

DAY 22
0

各位如果沒有關APP通知的時候,有時候我們就會收到來自APP的關懷,譬如說是有優惠活動,或是您的吳柏毅預計XX分內到達,這些都是我們在由後端發送訊息,然後我們在Service的時候拿到消息。

首先我們一樣要到Tools→Firebase→Clound Messaging,來新增我們的

implementation 'com.google.firebase:firebase-messaging-ktx:22.0.0'

一、建立我們的MessagingService

它這邊只有讓我們的override兩個funtion,而且也不用手動去設定startService(),它會自己幫我們啟動。

class MyFirebaseMessagingService: FirebaseMessagingService(){

    

    override fun onNewToken(p0: String) {
        Timber.d("onNewToken $p0")
        super.onNewToken(p0)
    }

    override fun onMessageReceived(p0: RemoteMessage) {

        if (p0.notification != null){
            Timber.d("訊息是title = ${p0.notification!!.title}")
            Timber.d("訊息是body = ${p0.notification!!.body    }")

        }
        super.onMessageReceived(p0)
    }

}
  • onNewToken(): 安裝/重新安裝app到新的手機時,Firebase SDK就會呼叫它,並創立一個新的Token
  • onMessageReceived(): 當Firebase Server發送新的消息時,就會呼叫它,我們可以透過notification.title來拿到它的title,或是.body來拿到內容。

★我們可以先記起來token,等等讓我們可以從Firebase平台來做發送,但是如果你今天沒有在第一次的時候Log出來,那麼你可以透過以下來再次拿到token

FirebaseMessaging.getInstance().token.addOnSuccessListener {
            Timber.d("messaging token: $it")
        }.addOnFailureListener {
            Timber.d("messaging token fail")
        }

★ 由於要發送訊息給某終端機時,需要有該終端機的Token,所以這些使用者的Token請要妥善管理。

並且我們需要在Manifest新增以下

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

        </service>

二、發送測試通知

原本想說如果在每個user寄message的時候,我們就寄寄通知,因為這樣就可以拿到該user的data,也感覺很方便,但是後來發覺怪怪的,因為通知應該不是會由每個user發,而是由第三方監測到數據更改,然後再發送給使用者的吧?? 好的,於是乎,我們改成做出發送廣告 ><

而FCM有提供兩種

Firebase Cloud Messaging 提供了兩種將消息定位到多個設備的方法:

  • 主題訊息,它允許你將消息發送到具有特定主題選擇多個設備。
  • 設備組的消息,它允許你將消息發送到屬於您定義的多台設備。

我們這次主要是透過主題的方式

而主題註冊的方式也很簡單,我們在 MyApp新增以下

private fun subscribeToTopic(){
				//subcribeToTopic裡面的參數就填寫主題
        Firebase.messaging.subscribeToTopic("advertisement")
            .addOnCompleteListener { task ->
                if (!task.isSuccessful){
                    Timber.d("訂閱不成功")
                }else{
                    Timber.d("訂閱成功")
                }
            }
    }

接下來,我們直接去Firebase的平台→自己的專案→Clound Messaging 來測試

https://ithelp.ithome.com.tw/upload/images/20211007/20138017bhob6uTd56.png

1.通知

按照它的規格寫就好

2.指定目標

你可以選擇使用者區隔,裡面會有一些版本/國家等等的區隔,或是我們這次要用的主題,我們在訊息主題直接新增剛剛我們在專案訂閱的關鍵字 "advertisement"

然後回到1通知後,我們用傳送測試訊息,接下來要把剛剛得到的token傳進去,之後選擇後按測試,就可以啦!!

https://ithelp.ithome.com.tw/upload/images/20211007/20138017zfscX0v7w7.png


上一篇
【day21】創建對象列表(下)
下一篇
【day23】存local端 帳號 (SharedPreferences)
系列文
30天建立寵物約散App-Android新手篇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言