Поиск токена FCM [Xamarin] - обновление из-за устаревшего метода - PullRequest
0 голосов
/ 15 сентября 2018

Итак, FirebaseInstanceIdService выдает предупреждение, что оно устарело и устарело.

OnTokenRefresh() больше не работает, и вместо этого мы должны использовать:

   public void onNewToken(String s) {
        Log.d("FCM_TOKEN", s);
        // save in SharedPreference for future use
    }

Но - чтобы получить токен в MainActivity, я ранее использовал:

FirebaseInstanceId.Instance.Token

Это также устарело, и я мог найти только решение Java для этого:

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


});

Не могли бы вы дать мне знать, как я могу получить текущий токен в C # (Xamarin)?


Вопрос # 2: это правильная реализация для OnNewToken() в C #:

    public class MessagingService : FirebaseMessagingService
{
    const string TAG = "MyFirebaseMsgService";
    public override void OnNewToken(string token)
    {
        Log.Debug(TAG, "Refreshed token: " + token);
        SendToServer(token);

    }


}

Спасибо большое!

1 Ответ

0 голосов
/ 16 сентября 2018

1) Я также использую Firebase Cloud Messaging для своего проекта. Я не думаю, что FirebaseInstanceId.Instance.Token устарела по двум причинам. Во-первых, у меня нет никаких предупреждений, как вы сказали. Во-вторых, FCM Notification Walkthrough от Microsoft недавно обновлен, и в нем не упоминается, что свойство устарело.

2) FirebaseMessagingService - для обработки полученных уведомлений (или сообщений), а не для обработки токенов. Например, если ваш сервер приложений отправляет сообщение ( как отправить сообщение ) клиенту (устройству), FirebaseMessagingService - это место, где вы получаете и обрабатываете сообщение на клиенте. Кроме того, если вы щелкните правой кнопкой мыши в классе FirebaseMessagingService -> "Перейти к определению" , вы увидите, что не OnNewToken() для переопределения.

Q1 и Q2 собираются вместе, я полагаю, вы хотите что-то вроде ниже, чтобы получить регистрационный токен и отправить его на сервер приложений.

[Service]
[IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]
public class MyFirebaseIIDService : FirebaseInstanceIdService
{
    const string TAG = "MyFirebaseIIDService";
    public override void OnTokenRefresh()
    {
        var refreshedToken = FirebaseInstanceId.Instance.Token;
        Log.Debug(TAG, "Refreshed token: " + refreshedToken);
        SendRegistrationToServer(refreshedToken);
    }
    void SendRegistrationToServer(string token)
    {
       // send token to app server  
    }
}    

Код выше извлечен из пошагового руководства. Мои объяснения краткие и неполные. Вы должны прочитать пошаговое руководство, чтобы лучше понять.

...