如何在 FirebaseInstanceIdService 之外访问 Firebase 令牌?
How do I access Firebase tokens outside of the FirebaseInstanceIdService?
我正在从 GCM 升级到 FCM。在 onTokenRefresh 之外获取 Firebase 设备令牌的正确方法是什么?
我正在尝试获取设备令牌,以便稍后可以在我的服务器上重新启用它。我最初是按照方法 1 here 显示的文档获取设备令牌的。但是,当我尝试通过方法 2 直接访问设备令牌时,我得到了一个不同的令牌。我在方法 2 中是否错误地检索了设备令牌?
方法一:在FirebaseInstanceIdService.onTokenRefresh()
里面
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
方法二:直接获取设备令牌
FirebaseInstanceId instanceID = FirebaseInstanceId.getInstance();
String registrationToken = instanceID.getToken(this.projectNumber, "FCM");
只是为了解释方法 1 中发生的事情。建议在 onTokenRefresh()
中获取令牌,因为触发此方法时,意味着 previous 令牌已失效。来自文档:
Called when the system determines that the tokens need to be refreshed. The application should call getToken() and send the tokens to all application servers.
对于方法 #2,您正在调用 getToken(String authorizedEntity, String scope)
, instead of getToken()
. The one with two parameters is commonly used when 。
每次使用不同的项目 ID (authorizedEntity
) 调用 getToken(String authorizedEntity, String scope)
,它都会 return 一个不同的令牌。
只需将您的方法 2 替换为 方法 1 中的相同调用,如下所示:
String registrationToken = FirebaseInstanceId.getInstance().getToken();
并且您应该能够检索到指定的令牌。令牌通常在您初始 activity.
的 onCreate()
中检索
对于正在寻找此问题更好解决方案的任何人,这就是我的处理方式。如果您的应用程序是第一次运行或者您刚刚清除了应用程序数据,将会生成一个唯一的令牌。
要在 FirebaseInstanceIdService
class 之外访问 token
,请使用 onTokenRefresh
内的 SharedPreference 并保存您的令牌,如下所示。
public class FireBaseTokenClass extends FirebaseInstanceIdService {
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
SharedPreferences sharedPreferences = getSharedPreferences("file_save_token", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("myToken", refreshedToken);
editor.apply();
}
}
要在服务 class 之外访问您的令牌,只需这样说:
SharedPreferences sharedPreferences = getSharedPreferences("file_save_token", Context.MODE_PRIVATE);
String token = sharedPreferences.getString("myToken", "");
我正在从 GCM 升级到 FCM。在 onTokenRefresh 之外获取 Firebase 设备令牌的正确方法是什么?
我正在尝试获取设备令牌,以便稍后可以在我的服务器上重新启用它。我最初是按照方法 1 here 显示的文档获取设备令牌的。但是,当我尝试通过方法 2 直接访问设备令牌时,我得到了一个不同的令牌。我在方法 2 中是否错误地检索了设备令牌?
方法一:在FirebaseInstanceIdService.onTokenRefresh()
里面String refreshedToken = FirebaseInstanceId.getInstance().getToken();
方法二:直接获取设备令牌
FirebaseInstanceId instanceID = FirebaseInstanceId.getInstance();
String registrationToken = instanceID.getToken(this.projectNumber, "FCM");
只是为了解释方法 1 中发生的事情。建议在 onTokenRefresh()
中获取令牌,因为触发此方法时,意味着 previous 令牌已失效。来自文档:
Called when the system determines that the tokens need to be refreshed. The application should call getToken() and send the tokens to all application servers.
对于方法 #2,您正在调用 getToken(String authorizedEntity, String scope)
, instead of getToken()
. The one with two parameters is commonly used when
每次使用不同的项目 ID (authorizedEntity
) 调用 getToken(String authorizedEntity, String scope)
,它都会 return 一个不同的令牌。
只需将您的方法 2 替换为 方法 1 中的相同调用,如下所示:
String registrationToken = FirebaseInstanceId.getInstance().getToken();
并且您应该能够检索到指定的令牌。令牌通常在您初始 activity.
的onCreate()
中检索
对于正在寻找此问题更好解决方案的任何人,这就是我的处理方式。如果您的应用程序是第一次运行或者您刚刚清除了应用程序数据,将会生成一个唯一的令牌。
要在 FirebaseInstanceIdService
class 之外访问 token
,请使用 onTokenRefresh
内的 SharedPreference 并保存您的令牌,如下所示。
public class FireBaseTokenClass extends FirebaseInstanceIdService {
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
SharedPreferences sharedPreferences = getSharedPreferences("file_save_token", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("myToken", refreshedToken);
editor.apply();
}
}
要在服务 class 之外访问您的令牌,只需这样说:
SharedPreferences sharedPreferences = getSharedPreferences("file_save_token", Context.MODE_PRIVATE);
String token = sharedPreferences.getString("myToken", "");