FirebaseInstanceIdServiceは廃止されました


223

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セットアップドキュメント


更新

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

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

NEW From:FirebaseMessagingService

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

ありがとう。




オンラインドキュメントが更新されました。firebase.google.com/docs/reference/android/com/google/firebase/...
jackycflau

電話する必要はありますsuper.onNewToken(s);か/正しいですか?(firebase.google.com/docs/cloud-messaging/android/clientで呼び出されていないようです。)
ban-geoengineering

マニフェストに変更はありますか?
Muahmmad Tayyib 2018

回答:


122

ここにファイアベーサー

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

このクラスは廃止されました。

での上書きonNewTokenを支持しますFirebaseMessagingService。それが実装されたら、このサービスは安全に削除できます。

奇妙なことに、JavaDocはまだメソッドFirebaseMessagingServiceについて言及してonNewTokenいません。更新されたすべてのドキュメントがまだ公開されていないようです。リファレンスドキュメントの更新を公開するため、およびガイド内のサンプルも更新するために、内部の問題を提出しました。

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


7
Firebaseドキュメントはまた、まだ更新されていません。
ロザリオペレイラフェルナンデス

1
はい、@ frank、メソッドは存在しますが、関連ドキュメントはまだ更新されていません。
Uttam Panchasara

@kevそれは(有効な)新しい質問のように聞こえます。最小限の完全なコードスニペットで新しい投稿を作成してください。
フランクファンPuffelen

@FrankvanPuffelenはすでにしました。見てください。stackoverflow.com/questions/51296171/...
KEV

1
Xamarin Androidのこのアップデートについても見つけました。FirebaseMessagingServiceを拡張するクラスにOnNewTokenメソッドを追加しました。しかし、その方法は影響を受けません。どうすればいいのかわからない。xamarin用のAndroidマニフェストファイルとは異なりますか?
Prabesh

133

はい FirebaseInstanceIdService、非推奨です

FROM DOCS:- このクラスは廃止されました。賛成でoverriding onNewTokenの中でFirebaseMessagingService。それが実装されたら、このサービスは安全に削除できます。

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

今、私たちはする必要があります@Override onNewToken 取得TokenFirebaseMessagingService

サンプルコード

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(); Useよりもアクティビティでトークンを取得する必要がある場合も非推奨です getInstanceId ()

を使用getInstanceId ()してトークンを生成する必要があります

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

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

戻り値

  • InstanceIdResultを保持するIDを介して結果を確認するために使用できるタスク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())

    }
}

1
コメントは拡張ディスカッション用ではありません。この会話はチャットに移動しました
サミュエルLiew

FirebaseMessagingServiceをインポートする方法を誰も示さないのはなぜですか?
テミルベク

12

この:

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

非推奨のソリューションであると仮定します:

FirebaseInstanceId.getInstance().getToken()

編集

FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken() タスクがまだ完了していない場合は例外を生成する可能性があるため、Nilesh Rathodが(で.addOnSuccessListener)説明した方法は、正しい方法です。

コトリン:

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

5

Kotlinでは、他の回答に示されているものよりもさらに単純なコードが可能です。

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

class MyFirebaseMessagingService: FirebaseMessagingService() {

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

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

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

5

FirebaseinstanceIdService廃止予定です。したがって、「FirebaseMessagingService」を使用する必要があります

画像を海に送ってください:

ここに画像の説明を入力してください

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

4

KOTLINの場合:- トークンをDBまたは共有設定に保存する場合は、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")
                        }

今ではoverride fun onNewToken(token: String)(疑問符なし)です。
Csaba Toth

1

FCM実装クラス:

 public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Map<String, String> data = remoteMessage.getData();
if(data != null) {
 // Do something with Token
  }
}
}
// FirebaseInstanceId.getInstance().getToken();
@Override
public void onNewToken(String token) {
  super.onNewToken(token);
  if (!token.isEmpty()) {
  Log.e("NEW_TOKEN",token);
 }
}
}

そして、アクティビティまたはAPPでその初期化を呼び出します。

FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(
                instanceIdResult -> {
                    String newToken = instanceIdResult.getToken();
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.i("FireBaseToken", "onFailure : " + e.toString());
                    }
                });

AndroidManifest.xml:

  <service android:name="ir.hamplus.MyFirebaseMessagingService"
        android:stopWithTask="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>

**「INSTANCE_ID_EVENT」を追加した場合、忘れずに無効にしてください。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.