Firebase Messaging Android SDK(com.google.firebase:firebase-messaging:20.0.0)的最新更新@Nullable为该FirebaseIntanceId.getToken(String senderId, String scope)方法添加了返回类型注释。
由于我们使用该SDK在我们自己的代码中使用科特林,我们现在得到一个编译错误的推断返回类型不再String,但String?。
问题是:getToken()呼叫返回时我们需要做什么null?
该文档没有提及null返回的情况或在这种情况下客户端代码需要执行的操作。
这种情况下的最佳做法是什么?重新请求getToken()向右走,与某种指数回退的重新请求呢?
Google 添加了回调方法,您可以在调用中添加 OnCompleteListener并异步检索它。
下面是一些 Java 代码示例:
private static String fcmId;
/**
* Get the FCMID using a callback method
*/
public static void getFCMID(){
try {
FirebaseApp.getInstance();
FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(
task -> {
if (!task.isSuccessful()) {
try {
task.getException().printStackTrace();
} catch (Exception e){}
fcmId = null;
Log.d("FMCID", "Could not retrieve FCMID");
return;
}
InstanceIdResult result = task.getResult();
if(result == null){
fcmId = null;
Log.d("FMCID", "Could not retrieve FCMID");
return;
}
// Get new Instance ID token
String token = result.getToken();
if(!token.isEmpty()){
fcmId = token;
Log.d("FMCID", "Success! Do stuff with FCMID");
} else {
fcmId = null;
Log.d("FMCID", "Could not retrieve FCMID");
}
});
} catch (Exception e){
fcmId = null;
Log.d("FMCID", "Could not retrieve FCMID");
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
这是 Kotlin 中的:
private var fcmId: String? = null
/**
* Get the FCMID using a callback method
*/
fun getFCMID() {
try {
FirebaseApp.getInstance()
FirebaseInstanceId.getInstance().instanceId.addOnCompleteListener { task ->
if(task.isSuccessful){
val result = task.result
if (result != null) {
// Get new Instance ID token
val token = result!!.token
if (!token.isEmpty()) {
fcmId = token
Log.d("FMCID", "Success! Do stuff with FCMID")
} else {
fcmId = null
Log.d("FMCID", "Could not retrieve FCMID")
}
} else {
fcmId = null
Log.d("FMCID", "Could not retrieve FCMID")
}
} else {
fcmId = null
Log.d("FMCID", "Could not retrieve FCMID")
}
}
} catch (e: Exception) {
fcmId = null
Log.d("FMCID", "Could not retrieve FCMID")
e.printStackTrace()
}
}
Run Code Online (Sandbox Code Playgroud)
我通常的方法是运行它,分配令牌,然后将其保存到共享首选项或将其保存在单例中,即保存在扩展的类中Application。
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |