ফায়ারবেসআইনস্ট্যান্সআইডি সার্ভিসিকে হ্রাস করা হয়েছে


224

আশা করি এই ক্লাস সম্পর্কে আপনারা সবাই অবগত আছেন, ফায়ারবেস নোটিফিকেশন টোকেনটি রিফ্রেশ হয়ে গেলে আমরা নিম্নলিখিত শ্রেণীর পদ্ধতি থেকে এই ক্লাসটি থেকে রিফ্রেশ টোকেনটি পেয়েছি notification

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

এফসিএম বাস্তবায়ন করতে চাইলে এটি ব্যবহার করতে, আমি মাইক্লাস থেকে প্রসারিত করেছি FirebaseInstanceIdService

কিন্তু, দেখানো হচ্ছে ফায়ারবেইস ইনস্ট্যান্সআইডসোসভারটি হ্রাস করা হয়েছে তা

কেউ কি এটি জানেন ?, এটির পরিবর্তিত হওয়ায় রিফ্রেশ টোকেন পেতে এর পরিবর্তে আমার কোন পদ্ধতি বা ক্লাস ব্যবহার করা উচিত।

আমি ব্যাবহার করছি : implementation 'com.google.firebase:firebase-messaging:17.1.0'

আমি ডকুমেন্টটি পরীক্ষা করে দেখেছি এটি সম্পর্কে কিছুই উল্লেখ করা নেই। : এফসিএম সেটআপ ডকুমেন্ট


হালনাগাদ

এই সমস্যাটি স্থির করা হয়েছে।

গুগল হিসাবে অবহেলা হিসাবে FirebaseInstanceService ,

আমি উপায়টি খুঁজতে প্রশ্নটি জিজ্ঞাসা করেছি এবং আমি জানতে পারি যে আমরা ফায়ারবেসমেজিংসেবা থেকে টোকেন পেতে পারি ,

আগের মত, যখন আমি প্রশ্ন জিজ্ঞাসা করলাম নথি আপডেট করা হয়নি তবে এখন গুগল ডক্স আপডেট হয়েছে তাই আরও তথ্যের জন্য, এই গুগল ডকটিটি দেখুন: ফায়ারব্যাসমেজিংসেবা

ওল্ড থেকে: ফায়ারবেইস ইনটান্সস সার্ভিস (অবমূল্যায়িত)

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

নতুন থেকে: ফায়ারব্যাসমেসেজিং সার্ভিস

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

ধন্যবাদ।




অনলাইন ডকুমেন্টেশন সদ্য আপডেট হয়েছে। firebase.google.com/docs/reference/android/com/google/firebase/...
jackycflau


ম্যানিফেস্টে কোনও পরিবর্তন হবে?
মুহাম্মাদ তাইয়েব

উত্তর:


122

ফায়ারব্যাসার এখানে

এর জন্য রেফারেন্স ডকুমেন্টেশনFirebaseInstanceIdService চেক করুন :

এই শ্রেণি অবমূল্যায়ন করা হয়েছিল।

অগ্রাহ্য পক্ষে onNewTokenমধ্যে FirebaseMessagingService। এটি একবার কার্যকর হয়ে গেলে, এই পরিষেবাটি নিরাপদে সরিয়ে ফেলা যায়।

আশ্চর্যজনকভাবে জাভাডোকের জন্য এখনও পদ্ধতিটির FirebaseMessagingServiceউল্লেখ onNewTokenনেই। দেখে মনে হচ্ছে যে সমস্ত আপডেট হওয়া ডকুমেন্টেশন এখনও প্রকাশিত হয়নি। আমি প্রকাশিত রেফারেন্স ডক্সের আপডেট পেতে এবং গাইডে নমুনাগুলি আপডেট করার জন্য একটি অভ্যন্তরীণ সমস্যা দায়ের করেছি।

ইতিমধ্যে দু'জনেই পুরানো / অবমানিত কলগুলি এবং নতুনগুলির জন্য কাজ করা উচিত। যদি আপনার কোনওর সাথে সমস্যা হয় তবে কোডটি পোস্ট করুন এবং আমার একটি চেহারা হবে।


7
Firebase ডক্স এছাড়াও এখনও আপডেট করা হয় নি।
রোজারিও পেরেইরা ফার্নান্দিস

1
হ্যাঁ @ ফ্র্যাঙ্ক, পদ্ধতিটি বিদ্যমান, তবে সম্পর্কিত নথিগুলি এখনও আপডেট হয়নি।
উত্তম পঞ্চসার

@ কেভ এটি একটি (বৈধ) নতুন প্রশ্নের মতো মনে হচ্ছে। একটি সর্বনিম্ন সম্পূর্ণ কোড স্নিপেট সহ একটি নতুন পোস্ট তৈরি করুন।
ফ্র্যাঙ্ক ভ্যান পাফেলেন

@ ফ্র্যাঙ্কওয়ানপফলেন ইতিমধ্যে করেছেন। একবার দেখুন। stackoverflow.com/questions/51296171/…
কেভ

1
জামারিন অ্যান্ড্রয়েডের জন্যও আমি এই আপডেটটি পেয়েছি। ক্লাসে অননিউ টোকেন পদ্ধতি যুক্ত করা হয়েছে যা ফায়ারবেসমেসেজিং সার্ভিসিকে প্রসারিত করে। তবে সেই পদ্ধতিটি আঘাত হানে না। আমার কী করা উচিত তা আমি বুঝতে পারি না। এটি xamarin এর জন্য অ্যান্ড্রয়েড ম্যানিফেস্ট ফাইলে কি আলাদা?
প্রভেশ

133

হ্যাঁ FirebaseInstanceIdService হ্রাস করা হয়েছে

ডকস থেকে: - এই শ্রেণি অবচয় ছিল। পক্ষে overriding onNewTokenমধ্যে FirebaseMessagingService। এটি একবার কার্যকর হয়ে গেলে, এই পরিষেবাটি নিরাপদে সরিয়ে ফেলা যায়।

FirebaseInstanceIdServiceএফসিএম টোকেন পেতে পরিষেবা ব্যবহার করার দরকার নেই আপনি নিরাপদে 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);

     }
 });

সম্পাদনা 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
মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
স্যামুয়েল লিউ

কেউ কেন ফায়ারবেসমেজিংসেবা আমদানি করতে দেখায় না?
তেমিরবেক

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অবচয় করা হয়। সুতরাং "ফায়ারবেসম্যাসেজিংসেবা" ব্যবহার করতে হবে

ছবিটি সমুদ্র করুন:

এখানে চিত্র বর্ণনা লিখুন

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 ইন: - আপনি সংরক্ষণ করতে চান টোকেন ডিবি বা ভাগ পছন্দ তারপর onNewToken মধ্যে ওভাররাইড FirebaseMessagingService

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

এফসিএম বাস্তবায়ন শ্রেণি:

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

অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল:

  <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.