web-dev-qa-db-ja.com

FirebaseInstanceIdServiceは廃止予定です

Firebase通知トークンが更新されるたびに通知トークンを取得するために使用されていた、このクラスを知っていることを願っています。このクラスから更新されたトークンを取得します。

@Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);
}

FCMを実装したいのでこれを使用するために、MyClassをFirebaseInstanceIdServiceから拡張しました。

しかし、 FirebaseInstanceIdServiceを表示することは推奨されません

誰もがこれを知っていますか?、これは廃止予定であるため、更新されたトークンを取得するためにこれの代わりに使用するメソッドまたはクラスは何ですか。

私は使っています:implementation 'com.google.firebase:firebase-messaging:17.1.0'

私はこれについて何も述べられていないのと同じ文書をチェックした。 : FCMセットアップ文書


_ update _

この問題は修正されました。

GoogleがFirebaseInstanceServiceを非推奨にしたので、

私は方法を見つけるために質問をしました、そして私は私達が FirebaseMessagingService からトークンを得ることができることを知るようになりました、

以前と同様に、質問文書は更新されていませんがGoogleドキュメントは更新されていますが、詳細については、Googleドキュメントを参照してください。 FirebaseMessagingService

OLD From:FirebaseInstanceService(廃止予定)

@Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);
}

新規作成者:FirebaseMessagingService

@Override
public void onNewToken(String s) {
    super.onNewToken(s);
    Log.d("NEW_TOKEN",s);
}

ありがとう。

129

firebaserはこちら

FirebaseInstanceIdServiceの参照ドキュメント を確認してください。

このクラスは非推奨です。

onNewTokenFirebaseMessagingServiceをオーバーライドすることに賛成です。それが実行されれば、このサービスは安全に削除することができます。

FirebaseMessagingServiceのJavaDocでは、onNewTokenメソッドについてまだ言及していません。更新されたすべてのドキュメントがまだ公開されていないようです。私は、発行された参照文書の最新版を入手するため、およびガイド内のサンプルも最新版にするために、内部問題を提出しました。

それまでの間、古い/推奨されない呼び出しと新しい呼び出しの両方が機能するはずです。どちらかに問題がある場合は、コードを投稿してください。

80

YesFirebaseInstanceIdServiceは廃止予定です

FROM DOCS: -このクラスは非推奨です。 FirebaseMessagingServiceoverriding onNewTokenに賛成です。それが実行されれば、このサービスは安全に削除することができます。

FCMトークンを取得するためにFirebaseInstanceIdServiceサービスを使用する必要はありませんFirebaseInstanceIdServiceサービスを安全に削除できます。

Token@Override onNewTokenFirebaseMessagingServiceを入れる必要があります

サンプルコード

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    @Override
    public void onNewToken(String s) {
        Log.e("NEW_TOKEN", s);
    }

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {

        Map<String, String> params = remoteMessage.getData();
        JSONObject object = new JSONObject(params);
        Log.e("JSON_OBJECT", object.toString());

        String NOTIFICATION_CHANNEL_ID = "Nilesh_channel";

        long pattern[] = {0, 1000, 500, 1000};

        NotificationManager mNotificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "Your Notifications",
                    NotificationManager.IMPORTANCE_HIGH);

            notificationChannel.setDescription("");
            notificationChannel.enableLights(true);
            notificationChannel.setLightColor(Color.RED);
            notificationChannel.setVibrationPattern(pattern);
            notificationChannel.enableVibration(true);
            mNotificationManager.createNotificationChannel(notificationChannel);
        }

        // to diaplay notification in DND Mode
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = mNotificationManager.getNotificationChannel(NOTIFICATION_CHANNEL_ID);
            channel.canBypassDnd();
        }

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);

        notificationBuilder.setAutoCancel(true)
                .setColor(ContextCompat.getColor(this, R.color.colorAccent))
                .setContentTitle(getString(R.string.app_name))
                .setContentText(remoteMessage.getNotification().getBody())
                .setDefaults(Notification.DEFAULT_ALL)
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(R.drawable.ic_launcher_background)
                .setAutoCancel(true);


        mNotificationManager.notify(1000, notificationBuilder.build());
    }
}

編集

このようにマニフェストファイルにFirebaseMessagingServiceを登録する必要があります。

    <service
        Android:name=".MyFirebaseMessagingService"
        Android:stopWithTask="false">
        <intent-filter>

            <action Android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>

あなたの活動の中でトークンを取得する方法

.getToken(); を使用するよりもあなたのアクティビティでトークンを取得する必要がある場合は、 getInstanceId () も推奨されません。

今度はトークンを生成するために getInstanceId () を使う必要があります

getInstanceId ()このIDプロジェクト用のFirebaseと自動生成されたトークンを返します。

まだインスタンスIDが存在しない場合は、これによってインスタンスIDが生成され、Firebaseバックエンドに定期的に情報の送信が開始されます。

戻り値

  • InstanceIdResultIDを保持するtokenを介して結果を見るために使用できるタスク。

サンプルコード

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

     }
 });

編集2

これがkotlinの作業コードです。

class MyFirebaseMessagingService : FirebaseMessagingService() {

    override fun onNewToken(p0: String?) {

    }

    override fun onMessageReceived(remoteMessage: RemoteMessage?) {


        val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        val NOTIFICATION_CHANNEL_ID = "Nilesh_channel"

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val notificationChannel = NotificationChannel(NOTIFICATION_CHANNEL_ID, "Your Notifications", NotificationManager.IMPORTANCE_HIGH)

            notificationChannel.description = "Description"
            notificationChannel.enableLights(true)
            notificationChannel.lightColor = Color.RED
            notificationChannel.vibrationPattern = longArrayOf(0, 1000, 500, 1000)
            notificationChannel.enableVibration(true)
            notificationManager.createNotificationChannel(notificationChannel)
        }

        // to diaplay notification in DND Mode
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val channel = notificationManager.getNotificationChannel(NOTIFICATION_CHANNEL_ID)
            channel.canBypassDnd()
        }

        val notificationBuilder = NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)

        notificationBuilder.setAutoCancel(true)
                .setColor(ContextCompat.getColor(this, R.color.colorAccent))
                .setContentTitle(getString(R.string.app_name))
                .setContentText(remoteMessage!!.getNotification()!!.getBody())
                .setDefaults(Notification.DEFAULT_ALL)
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(R.drawable.ic_launcher_background)
                .setAutoCancel(true)


        notificationManager.notify(1000, notificationBuilder.build())

    }
}
97
Nilesh Rathod

この:

FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken()

廃止予定のソリューションであるとします。

FirebaseInstanceId.getInstance().getToken()

_編集_

タスクがまだ完了していない場合、FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken()は例外を生成する可能性があるため、(.addOnSuccessListenerを使用して)説明されているメソッド魔女Nilesh Rathodがそれを実行する正しい方法です。

コトリン:

FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener(this) { instanceIdResult ->
        val newToken = instanceIdResult.token
        Log.e("newToken", newToken)
    }
9

KOTLINの場合: - DBまたは共有設定に Token を保存する場合は、 FirebaseMessagingServiceのonNewTokenをオーバーライドします

override fun onNewToken(token: String?) {
        super.onNewToken(token)
    }

実行時にトークンを取得します。

FirebaseInstanceId.getInstance().instanceId
                        .addOnSuccessListener(this@SplashActivity) { instanceIdResult ->
                            val mToken = instanceIdResult.token
                            println("printing  fcm token: $mToken")
                        }
2
Rahul

Kotlinは他の答えに示されているものよりもさらに単純なコードを可能にします。

更新されるたびに新しいトークンを取得するには

class MyFirebaseMessagingService: FirebaseMessagingService() {

    override fun onNewToken(token: String?) {
        Log.d("FMS_TOKEN", token)
    }
    ...
}

実行時にどこからでもトークンを取得するには

FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener {
    Log.d("FMS_TOKEN", it.token)
}
1
Gumby The Green

FirebaseinstanceIdServiceは非推奨です。 「FirebaseMessagingService」を使用する必要があります

画像を海にしてください:

enter image description here

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    @Override
    public void onNewToken(String s) {
        super.onNewToken(s);
        Log.e("NEW_TOKEN",s);
    }

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
    }
}
0
Harunduet