我已使用this code实施了Firebase,并且我能够在logcat中看到刷新令牌。
我正在尝试存储令牌,以便我可以在片段中使用它
private void sendRegistrationToServer(String token) {
PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().putString("regToken", token).commit();
}
当我尝试在我的片段中阅读它时,我会将令牌发送到服务器,我无法阅读它:
PreferenceManager.getDefaultSharedPreferences(context).getString("regToken", "false");
不幸的是,一旦调用Fragment,它就无法读取regToken
并返回false
。
如何从Fragment中的MyFirebaseInstanceIDService读取存储的值?我怀疑这个问题是关于"不同的背景"。如果是这样,我怎么能使用"相同的"存储/阅读时的上下文。
答案 0 :(得分:2)
FirebaseInstanceId类提供了一个单例,您可以在任何地方使用它来检索当前令牌。
FirebaseInstanceId.getInstance().getToken();
在Fragment中调用发送到服务器的位置应该可以正常工作。
答案 1 :(得分:0)
创建应用程序类
public class MyApplication extends Application {
public String Token;
}
使用此代码存储令牌
((MyApplication) getApplicationContext()).Token = "Your Token";
这段代码将其检索回来
String token = ((MyApplication) getApplicationContext()).Token
不要忘记在AndroidManifist文件中添加Application类,如
<application
android:name=".MyApplication"
并且您还可以将MyAppliction类的Token
属性更改为private,并使用getter和setter来访问它。
答案 2 :(得分:0)
我发现获取刷新令牌有一些延迟,因此当我试图读取共享偏好时,它还没有被写入。
通过创建一个小延迟,我现在可以成功读取令牌:
new android.os.Handler().postDelayed(
new Runnable() {
public void run() {
String savedToken = PreferenceManager.getDefaultSharedPreferences(getActivity().getApplicationContext()).getString("pushToken", "false");
Log.e("SAVED", savedToken);
}
},
3000);