エラー
Firebaseのチュートリアルを進めていると、クライアントアプリのインスタンスの登録トークンを取得するステップにあたります。
チュートリアルでは以下の記載があります。
現在のトークンを取得する必要がある場合は、FirebaseMessaging.getInstance().getToken() を呼び出します。
同じくチュートリアルでは、kotlinの場合のコード例が紹介されています。
FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
if (!task.isSuccessful) {
Log.w(TAG, "Fetching FCM registration token failed", task.exception)
return@OnCompleteListener
}
// Get new FCM registration token
val token = task.result
// Log and toast
val msg = getString(R.string.msg_token_fmt, token)
Log.d(TAG, msg)
Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
})
ただし、これをこのまま貼り付けると、OnCompleteListener
が未定義だのTAG
が未定義だのmsg_token_fmt
が未定義だの怒られてしまいます。
解決方法
これを解消するには、まず以下のようにいくつかimportします。
import android.util.Log
import com.google.firebase.messaging.FirebaseMessaging
import com.google.android.gms.tasks.OnCompleteListener
次に、変数LOGを宣言します。
var LOG = "MyLog"
ここまでをまとめると、例えばAndroidDeveloperのチュートリアルアプリを作っていた場合は、次のようになります(Toastは省略)。
MainActivity.kt
package com.example.myfirstapp
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
//いろいろimport
import android.util.Log
import com.google.firebase.messaging.FirebaseMessaging
import com.google.android.gms.tasks.OnCompleteListener
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 変数
var TAG = "MyLog"
// トークン
FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
if (!task.isSuccessful) {
Log.w(TAG, "Fetching FCM registration token failed", task.exception)
return@OnCompleteListener
}
// 新しい登録トークンを取得
val token = task.result
// ログに出力
val msg = getString(R.string.msg_token_fmt, token)
Log.d(TAG, msg)
})
}
}
また、msg_token_fmt
のエラーについては、res/values/strings.xml
を開き、以下のようにします。
strings.xml
<resources>
<string name="app_name">My First App</string>
//これを追加
<string name="msg_token_fmt" translatable="false">FCM registration token: %s</string>
</resources>
これで無事アプリが実行され、Logcatにトークンが出力されます。