Firebase令牌未生成

时间:2017-07-18 05:22:39

标签: android firebase firebase-cloud-messaging

我没有生成令牌..

onTokenrefresh()没有调用。任何人都可以帮忙。

它还连接到firebase,但令牌仍未生成。

public class MyFireBaseInstanceId extends FirebaseInstanceIdService {

    private static final String TAG = "MyFirebaseIIDService";

    @Override
    public void onTokenRefresh() {

        //Getting registration token
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();


        //Displaying token on logcat
        Log.d(TAG, "Refreshed token: " + refreshedToken);
        sendRegistrationToServer(refreshedToken);

    }

    private void sendRegistrationToServer(String token) {
        //You can implement this method to store the token on your server
        //Not required for current project
        SharedPrefManager.getInstance(getApplicationContext()).saveDeviceToken(token);
    }
}

8 个答案:

答案 0 :(得分:1)

我得到了这个。我刚刚验证了令牌是否为空。如果token为null,那么我们将调用ontokenrefresh()方法。

代码是:

tokengenerate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (token!=null) {
                    Toast.makeText(MainActivity.this,token,Toast.LENGTH_LONG).show();
                    RegisterToken registerToken = new RegisterToken();
                    registerToken.execute();
                }
                else
                    myFireBaseInstanceId.onTokenRefresh();

            }
        });
    }

答案 1 :(得分:1)

从任何活动中尝试此

FirebaseMessaging.getInstance().subscribeToTopic("news");
String notificationToken = FirebaseInstanceId.getInstance().getToken();

如果仍未获得令牌,则项目中的google-services.json文件将出现错误

答案 2 :(得分:0)

1)请检查您在项目中添加了正确的google-services.json文件。 2)检查您在清单文件中添加了FCM服务。

答案 3 :(得分:0)

只有在某些情况下才会调用

onTokenRefresh

  • 应用删除实例ID
  • 应用程序已在新设备上恢复
  • 用户卸载/重新安装应用
  • 用户清除应用数据

因此,当您第一次启动应用程序时,它可能会调用此方法,但不会在第二次启动时调用。

由于您使用SharedPreference,因此您可以使用它来检索活动中的令牌。

答案 4 :(得分:0)

当您获得FCM实例并首先在应用中刷新令牌时,FCM会生成令牌。 当您再次需要时您必须在设备中重新安装应用程序。

/NP

答案 5 :(得分:0)

您是否确定在您的AndroidManifest.xml中正确定义了FirebaseInstanceIdService

<service android:name=".MyFirebaseMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>
<service android:name=".FirebaseIDService">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
        </intent-filter>
    </service>

答案 6 :(得分:0)

确保将实例ID的属性添加到活动选项卡下的Android清单文件中。在androidmanifest中错误添加属性可能会导致此错误。

答案 7 :(得分:0)

在初次启动应用程序时,FCM SDK会为客户端应用程序实例生成注册令牌。如果要定位单个设备或创建设备组,则需要通过扩展FirebaseMessagingService并覆盖onNewToken来访问此令牌。

当您需要检索当前令牌调用时

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();

                // Log and toast
                String msg = getString(R.string.msg_token_fmt, token);
                Log.d(TAG, msg);
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });