FirebaseInstanceIdService kullanımdan kaldırıldı


224

Umarım hepiniz bu sınıfın farkındasınız, her ne zaman firebase bildirim jetonu yenilendiğinde bildirim jetonu alırız, bu sınıftan yenilenen jetonu alırız, Aşağıdaki yöntemden.

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

Bunu FCM'yi uygulamak istediğim gibi kullanmak için, MyClass'ı FirebaseInstanceIdService

Ancak, FirebaseInstanceIdService'in kullanımdan kaldırıldığını gösteren

Herkes bunu biliyor mu ?, Bu kullanımdan kaldırıldı olarak yenilenen simge almak için bunun yerine hangi yöntem veya sınıf kullanmalıyım.

Kullanıyorum : implementation 'com.google.firebase:firebase-messaging:17.1.0'

Belgeyi kontrol ettim, bununla ilgili hiçbir şey yok. : FCM KURULUM DOKÜMANI


GÜNCELLEME

Bu sorun düzeltildi.

Google, kullanımdan kaldırıldığı için FirebaseInstanceService,

Soruyu yolunu bulmak için sordum ve Jetonu FirebaseMessagingService'ten alabileceğimizi biliyorum ,

Daha önce olduğu gibi, Soru Belgelerinin güncellenmediğini sorduğumda, ancak Google dokümanları daha fazla bilgi için güncellendiğinde, bu google dokümanına bakın: FirebaseMessagingService

ESKİ Gönderen: FirebaseInstanceService (Kullanımdan kaldırıldı)

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

YENİ Gönderen: FirebaseMessagingService

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

Teşekkürler.


1
Üzerinde karşılıklı yayınlandı GitHub'dan
Rosário Pereira Fernandes



Aramak gerekli / doğru super.onNewToken(s);mu? ( Firebase.google.com/docs/cloud-messaging/android/client adresinde çağrıldığını görmüyorum .)
ban-

manifestte herhangi bir değişiklik olur mu?
Muahmmad Tayyib

Yanıtlar:


122

burada itfaiyeci

Aşağıdakiler için referans belgelerine bakınFirebaseInstanceIdService :

Bu sınıf kullanımdan kaldırıldı.

Ağır basan lehine onNewTokeniçinde FirebaseMessagingService. Bu uygulandıktan sonra, bu hizmet güvenle kaldırılabilir.

Garip bir şekilde JavaDoc için henüz yöntemden FirebaseMessagingServicebahsetmiyor onNewToken. Görünüşe göre güncellenmiş belgelerin tümü henüz yayınlanmamıştır. Yayınlanan referans dokümanlarındaki güncellemeleri almak ve rehberdeki örnekleri de güncellemek için dahili bir sorun hazırladım.

Bu arada hem eski / kullanımdan kaldırılmış çağrılar hem de yeni çağrılar çalışmalıdır. İkisiyle de sorun yaşıyorsanız, kodu gönderin ve bir göz atacağım.


7
Firebase Dokümanlar da henüz güncellenmemiş.
Rosário Pereira Fernandes

1
Evet @frank, yöntem var, ancak ilgili belgeler henüz güncellenmedi.
Uttam Panchasara

@kev (Geçerli) yeni bir soru gibi geliyor. Lütfen minimum tam kod snippet'i ile yeni bir yayın oluşturun.
Frank van Puffelen

@FrankvanPuffelen zaten yaptı. Bir bak. stackoverflow.com/questions/51296171/…
kev

1
Bu güncellemeyi Xamarin Android için de buldum. FirebaseMessagingService öğesini genişleten sınıfta OnNewToken yöntemi eklendi. Ancak bu yöntem isabet etmez. Ne yapmam gerektiğini anlayamıyorum. Xamarin için Android Manifest dosyasında farklı mıdır.
Prabesh

133

Evet FirebaseInstanceIdService kullanımdan kaldırıldı

DOCS: - Bu sınıf kullanımdan kaldırıldı. Lehine overriding onNewTokeniçinde FirebaseMessagingService. Bu uygulandıktan sonra, bu hizmet güvenle kaldırılabilir.

Kullanım gerek yok FirebaseInstanceIdServicegüvenle kaldırabilirsiniz belirteci hizmeti FCM almak için FirebaseInstanceIdServicehizmet

Şimdi @Override onNewToken içeri TokengirmeliyizFirebaseMessagingService

BASİT KOD

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

DÜZENLE

FirebaseMessagingServiceManifest dosyanızı böyle kaydetmeniz gerekiyor

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

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

etkinliğinizde nasıl jeton alırsınız

.getToken(); etkinliğinizde Kullanım'dan daha fazla jeton almanız gerekiyorsa da kullanımdan kaldırılır getInstanceId ()

Şimdi getInstanceId ()jeton oluşturmak için kullanmalıyız

getInstanceId ()IDBu Firebaseproje için ve otomatik olarak oluşturulan belirteci döndürür .

Bu, henüz yoksa, Firebase arka ucuna düzenli olarak bilgi göndermeye başlayan bir Eşgörünüm Kimliği oluşturur.

İadeler

  • Görev hangi aracılığıyla sonucunu görmek için kullanabileceğiniz InstanceIdResulthangi tutar IDve token.

BASİT KOD

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

     }
 });

DÜZENLEME 2

İşte kotlin için çalışma kodu

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
Yorumlar uzun tartışmalar için değildir; bu görüşme sohbete taşındı .
Samuel Liew

Neden kimse FirebaseMessagingService'in nasıl içe aktarılacağını göstermiyor?
temirbek

12

Ve bu:

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

kullanımdan kaldırılmış bir çözüm olduğunu varsayalım:

FirebaseInstanceId.getInstance().getToken()

DÜZENLE

FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken() görev henüz tamamlanmadıysa istisna üretebilir, bu nedenle açıklanan (ile .addOnSuccessListener) yöntem cadı Nilesh Rathod bunu yapmanın doğru yoludur.

Kotlin:

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

5

Kotlin, diğer yanıtlarda gösterilenden daha basit bir kod sağlar.

Yenilendiğinde yeni simgeyi almak için:

class MyFirebaseMessagingService: FirebaseMessagingService() {

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

Jetonu çalışma zamanında herhangi bir yerden almak için:

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

5

FirebaseinstanceIdServicekullanımdan kaldırıldı. Yani "FirebaseMessagingService" kullanmak zorunda

Deniz görüntü lütfen:

resim açıklamasını buraya girin

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 olarak: - Eğer kaydetmek istiyorsanız Token veritabanına veya paylaşılan tercihler daha sonra onNewToken geçersiz FirebaseMessagingService

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

Çalışma zamanında jeton alın, kullanın

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

Şimdi override fun onNewToken(token: String)(soru işareti olmadan).
Csaba Toth

1

FCM Uygulama Sınıfı:

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

Ve Etkinlik veya APP'de başlatmayı çağırın:

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" eklediyseniz devre dışı bırakmayı unutmayın.


1

Sen kullanmak zorunda FirebaseMessagingService() yerineFirebaseInstanceIdService

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.