如何在安卓中保存FCM令牌?



我正在按照这个在Firebase中注册我的设备。

在这里,我正在尝试显示并保存通知令牌

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseIIDService";
@Override
public void onTokenRefresh() {
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
storeToken(refreshedToken);
}
private void storeToken(String token) {
//saving the token on shared preferences
SharedPrefManager.getInstance(getApplicationContext()).saveDeviceToken(token);
}
}

当我尝试注册它时,总是说令牌Token not generated表单 主活动

所以在这里我的应用程序连接到Firebase..我知道FirebaseInstanceIdService已被弃用,我也尝试过这个

public class MyFirebaseInstanceIDService extends FirebaseMessagingService {
private static final String TAG = "MyFirebaseIIDService";
@Override
public void onNewToken(String refreshedToken) {
refreshedToken = FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
storeToken(refreshedToken);
}
private void storeToken(String token) {
//saving the token on shared preferences
SharedPrefManager.getInstance(getApplicationContext()).saveDeviceToken(token);
}
}

但仍然没有生成相同的令牌

只有在生成新令牌时才会调用onTokenRefresh/onNewToken方法。

通常(尤其是在开发过程中(,在添加服务之前,应用已经生成了实例 ID 令牌。因此,不会调用onTokenRefresh/onNewToken,并且您的共享首选项中不会有令牌。

因此,您应该直接从主活动中获取令牌,FirebaseInstanceId.getInstance().getInstanceId()如文档中所示。这将选取上次生成的令牌。从那里开始,您可以使用onTokenRefresh/onNewToken来响应令牌更改

只需将其添加到您的代码中即可。

public class MyActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);

SharedPreferences prefs = getSharedPreferences("TOKEN_PREF", MODE_PRIVATE);
String token = prefs.getString("token", "");
Log.e("NEW_INACTIVITY_TOKEN", token);
if (TextUtils.isEmpty(token)) {
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(MyActivity.this, new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult) {
String newToken = instanceIdResult.getToken();
Log.e("newToken", newToken);
SharedPreferences.Editor editor = getSharedPreferences("TOKEN_PREF", MODE_PRIVATE).edit();
if (token!=null){
editor.putString("token", newToken);
editor.apply();
}
}
});
}
}

}

Firebase 令牌在首次安装和运行应用时调用一次,因此请忽略使用共享首选项保存数据后保存数据或运行此活动/服务

无需使用onNewToken参数已返回getToken()新令牌

@Override
public void onNewToken(String refreshedToken) {
// No need to assign refreshedToken with getToken,
// this method called when token refreshed then use returned refreshedToken directly,
// use `instanceIdResult.getToken()` described below when you need to use token later throw app usage.
// refreshedToken = FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
storeToken(refreshedToken);
}

getToken((; 也被弃用

在您的活动中获取令牌:.getToken((; 如果您 需要在活动中获取令牌,然后按如下方式使用:

FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( MyActivity.this,  new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult) {
String newToken = instanceIdResult.getToken();
Log.e("newToken",newToken);
}
});

生成令牌可能需要一些时间。如果你没有得到它,你可以按如下方式生成它: (参考:https://firebase.google.com/docs/cloud-messaging/android/client?authuser=0(

FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() 
{
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) 
{
if (!task.isSuccessful()) {
Log.w(TAG, "getInstanceId failed", 
task.getException());
return;
}
// Get new Instance ID token
String token = task.getResult().getToken();
//Here you will surely get the token so store it in 
//sharedpreference for future use
}
});

试试这个 只需卸载并重新安装应用程序 因为每次玩应用程序时都不会生成令牌。 它是在清除 sharePref 或重新安装时生成的。

相关内容

  • 没有找到相关文章

最新更新