在Fragment或Activity中读取Firebase令牌

时间:2016-10-10 15:28:56

标签: android android-fragments firebase firebase-cloud-messaging

我已使用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读取存储的值?我怀疑这个问题是关于"不同的背景"。如果是这样,我怎么能使用"相同的"存储/阅读时的上下文。

3 个答案:

答案 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);