はじめに
FCMのバージョンを 17.1.0
に上げてから、以下の部分がDeprecatedで警告が出るようになりました。
MyFirebaseInstanceIDService.kt
class MyFirebaseInstanceIdService : FirebaseInstanceIdService() {
override fun onTokenRefresh() {
val token = FirebaseInstanceId.getInstance().token
// トークンをサーバに送る処理など
}
}
理由としては、バージョン17.1.0
から FirebaseInstanceIdService のクラス自体がDeprecatedなったからです。
その代わりに、 FirebaseMessagingService にonNewTokenメソッドが追加されました。
このDeprecatedを解消した手順を書きます。
手順
1. FirebaseInstanceIdService の使用箇所を削除
以下の行を削除。
AndroidManifest.xml
<service
android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
以下のファイルを削除。
MyFirebaseInstanceIDService.kt
class MyFirebaseInstanceIdService : FirebaseInstanceIdService() {
override fun onTokenRefresh() {
val token = FirebaseInstanceId.getInstance().token
// トークンをサーバに送る処理など
}
}
2. FirebaseMessagingService で新しいトークンを取得するように修正
FirebaseMessagingService のonNewTokenメソッドを追加。
FirebaseMessagingService を継承したクラスがない場合は、新規で作成。
MyFirebaseMessagingService.kt
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onNewToken(token: String?) {
// トークンをサーバに送る処理など
}
}
新規で作成する場合は、以下の記述も追加。
AndroidManifest.xml
<service android:name=".MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
3. 上記以外で、トークンを取得している部分を修正
FirebaseInstanceIdを使って、トークン取得している部分を変える
Before
val token = FirebaseInstanceId.getInstance().token
After
FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener { result ->
val token = result.token
}