FirebaseInstanceIdService पदावनत है


224

आशा है कि आप सभी इस वर्ग से अवगत होंगे, जब भी फायरबेस अधिसूचना टोकन रिफ्रेश हो जाता था, तो हम टोकन प्राप्त कर लेते थे, हम इस विधि से, इस विधि से, ताज़ा टोकन प्राप्त करते हैं।

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

इसका उपयोग करने के लिए जैसा कि मैं एफसीएम को लागू करना चाहता हूं, मैंने माईक्लास को आगे बढ़ाया FirebaseInstanceIdService

लेकिन, यह दिखाते हुए कि FirebaseInstanceIdService पदावनत है

क्या किसी को यह पता है ?, ताज़ा टोकन पाने के लिए मुझे इसके बजाय किस विधि या वर्ग का उपयोग करना चाहिए क्योंकि यह पदावनत है।

मैं उपयोग कर रहा हूँ : implementation 'com.google.firebase:firebase-messaging:17.1.0'

मैंने उसी के बारे में कुछ भी नहीं होने के लिए दस्तावेज की जाँच की। : FCM SETUP DOCUMENT


अपडेट करें

मामला सुलझ गया है।

जैसा कि गूगल पदावनत FirebaseInstanceService,

मैंने रास्ता खोजने के लिए प्रश्न पूछा और मुझे पता चला कि हम FirebaseMessagingService से टोकन प्राप्त कर सकते हैं ,

पहले की तरह, जब मैंने पूछा कि प्रश्न दस्तावेज़ अपडेट नहीं किए गए थे, लेकिन अब Google डॉक्स को अधिक जानकारी के लिए अपडेट किया गया है, तो इस Google दस्तावेज़ को देखें: FirebaseMessagingService

पुराने से: 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);
}

धन्यवाद।




ऑनलाइन प्रलेखन अभी अद्यतन किया गया है। firebase.google.com/docs/reference/android/com/google/firebase/…
jackycflau

क्या कॉल करना आवश्यक / सही है super.onNewToken(s);? (मुझे नहीं लगता कि इसे firebase.google.com/docs/cloud-messaging/android/client पर कॉल किया जा रहा है ।)
प्रतिबंध-जियोइंजीनियरिंग

क्या प्रकट में कोई बदलाव होगा?
मुहम्मद तय्यब

जवाबों:


122

यहाँ फायरबैशर

इसके लिए संदर्भ प्रलेखन देखेंFirebaseInstanceIdService :

इस वर्ग को पदावनत कर दिया गया।

में ओवरराइडिंग के पक्ष onNewTokenमें FirebaseMessagingService। एक बार लागू होने के बाद, इस सेवा को सुरक्षित रूप से हटाया जा सकता है।

अजीब तरह से JavaDoc के लिए अभी तक विधि का FirebaseMessagingServiceउल्लेख onNewTokenनहीं है। ऐसा लगता है कि सभी अद्यतन किए गए दस्तावेज़ अभी तक प्रकाशित नहीं हुए हैं। मैंने प्रकाशित डॉक्स के लिए अद्यतन प्राप्त करने के लिए एक आंतरिक मुद्दा दायर किया है, और गाइड में नमूनों को भी अपडेट किया है।

इस बीच, पुराने / हटाए गए दोनों कॉल, और नए लोगों को काम करना चाहिए। यदि आपको इससे कोई परेशानी हो रही है, तो कोड को पोस्ट करें और मुझे एक नज़र रखना होगा।


7
Firebase डॉक्स भी अभी तक अपडेट नहीं किया गया है।
रोजारियो परेरा फर्नांडिस

1
हां @frank, विधि मौजूद है, लेकिन संबंधित दस्तावेज़ अभी तक अपडेट नहीं किए गए हैं।
उत्तम पंचसारा

@kev यह एक (वैध) नए प्रश्न जैसा लगता है। कृपया न्यूनतम पूर्ण कोड स्निपेट के साथ एक नया पोस्ट बनाएं।
फ्रैंक वैन पफेलन

@FrankvanPuffelen ने पहले ही कर दिया था। एक नज़र देख लो। stackoverflow.com/questions/51296171/…
केव

1
मुझे Xamarin Android के लिए इस अपडेट के बारे में भी पता चला। क्लास में OnNewToken मेथड जोड़ा गया जो FirebaseMessagingService को बढ़ाता है। लेकिन वह तरीका हिट नहीं है। मैं यह पता नहीं लगा सकता कि मुझे क्या करना चाहिए। क्या यह एक्सामारिन के लिए एंड्रॉइड मैनिफेस्ट फ़ाइल में अलग है।
प्रबेश

133

हां FirebaseInstanceIdService वंचित है

DOCS से: - इस वर्ग को पदावनत कर दिया गया। के पक्ष overriding onNewTokenमें FirebaseMessagingService। एक बार लागू होने के बाद, इस सेवा को सुरक्षित रूप से हटाया जा सकता है।

FirebaseInstanceIdServiceFCM टोकन प्राप्त करने के लिए सेवा का उपयोग करने की आवश्यकता नहीं है आप सुरक्षित रूप से FirebaseInstanceIdServiceसेवा निकाल सकते हैं

अब हम की जरूरत है @Override onNewToken पाने TokenमेंFirebaseMessagingService

नमूना कोड

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परियोजना के लिए और स्वचालित रूप से उत्पन्न टोकन लौटाता है ।

यह एक इंस्टेंस आईडी उत्पन्न करता है यदि यह अभी तक मौजूद नहीं है, जो समय-समय पर फायरबेस बैकएंड पर सूचना भेजना शुरू करता है।

रिटर्न

  • टास्क जो आप के माध्यम से परिणाम देखने के लिए उपयोग कर सकते हैं 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);

     }
 });

EDIT 2

यहां कोटलिन के लिए काम करने का कोड है

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
टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
शमूएल ल्यू

क्यों कोई नहीं दिखा रहा है कि FirebaseMessagingService कैसे आयात करें?
तिमिरबेक

12

और इस:

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

माना जाता है कि पदावनत का समाधान:

FirebaseInstanceId.getInstance().getToken()

संपादित करें

FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken() यदि कार्य अभी तक पूरा नहीं हुआ है, तो अपवाद उत्पन्न कर सकते हैं, इसलिए नीलेश राठौड़ द्वारा बताई गई विधि (इसके साथ .addOnSuccessListener) सही तरीका है।

Kotlin:

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

5

कोटलिन अन्य उत्तरों में दिखाए गए से भी सरल कोड की अनुमति देता है।

जब भी यह ताज़ा हो तो नया टोकन प्राप्त करने के लिए:

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)(प्रश्न चिह्न के बिना) है।
सेसाबा तोथ

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

और गतिविधि या एपीपी में इसके आरंभ को कहें:

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" जोड़ा है, तो इसे अक्षम करना न भूलें।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.