Уведомление FCM Pu sh не работает на wearOS, если часы настроены с использованием iPhone - PullRequest
0 голосов
/ 15 февраля 2020

Я разрабатываю приложение для чата в реальном времени для android wear-OS. Я использую Ti c Watch Pro 4G для опытного тестирования. Мое приложение уже есть в магазине игр Wear-OS под названием «IoSite»

. Для уведомлений pu sh я использую FCM. У меня есть две наручные часы

Случай 1: Если я настраиваю часы с помощью телефона Android и загрузки приложения IoSite из магазина игр, то уведомление FCM Pu sh работает в обеих часах.

Случай 2: если я настраиваю часы, используя iPhone. Затем, когда я загружаю приложение IoSite в часы 1 и пытаюсь его использовать. Тогда уведомление FCM pu sh работает нормально. Затем я загружаю приложение IoSite в часы 2 и пытаюсь его использовать. FCM pu sh Уведомление работает в часы два колодца. Но после того, как приложение установлено в watch 2, уведомление FCM pu sh перестает работать в watch 1. Ниже приведен журнал студии Android, когда приложение пытается получить идентификатор экземпляра firebase:

2020-02-14 16: 39: 39.455 9476-9662 / com.iosite.iositewatchapp W / FirebaseInstanceId: не удалось получить токен без сообщения об исключении. Повторить попытку извлечения токена (com.google.firebase: firebase-iid @@ 20.0.2: 71) по адресу com.google.firebase.iid.zzl.zza (com.google.firebase: firebase-iid @@ 20.0.2: 84) по адресу com .google.firebase.iid.zzp.then (com.google.firebase: firebase-iid @@ 20.0.2: 4) на com.google. android .gms.tasks.zzd.run (неизвестный источник: 5) в java .util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1167) в java .util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor. java: 641) в java. .Thread.run (Thread. java: 764)

В этих часах 1, если я пытаюсь удалитьInstanceID (чтобы новый FCM SDK генерировал новый идентификатор), я получаю следующую ошибку :

2020-02-14 16: 39: 39.461 9476-9476 / com.iosite.iositewatchapp W / System.err: at com.google.firebase.iid.FirebaseInstanceId.deleteInstanceId (com. г oogle.firebase: firebase-iid @@ 20.0.2: 57) 2020-02-14 16: 39: 39.462 9476-9476 / com.iosite.iositewatchapp W / System.err: at com.iosite.iositewatchappapp.Services.MyFirebaseMessagingService $ 2.onComplete (MyFirebaseMessagingService. java: 407)

Пожалуйста, предложите решение.

1 Ответ

0 голосов
/ 29 марта 2020
    public class MyFirebaseMessagingService extends FirebaseMessagingService {
        private final String TAG = "MyFirebaseMessaging";
        private Context mContext;
        public static final String CHANNEL_ID = "NotifChannel";
        public static final String CHANNEL_ID_ANN = "AnnouncementChannel";
        public static final String CHANNEL_ID_MSG = "MsgChannel";
        private String fcm_token = "";
        public static List<MessageClass> messages = new ArrayList<>();
        Location location;
        private Vibrator audioVibe;
        private VibrationEffect audioVibeEffect;
    public MyFirebaseMessagingService() {
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }


    public MyFirebaseMessagingService(Context context) {
        Log.i(TAG, "MyFirebaseMessagingService started");
        mContext = context;

    }

    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.d(TAG, "onMessageReceived called: " + remoteMessage.getData());

        Map<String, String> messageReceivedData = remoteMessage.getData();
        if (messageReceivedData.size() > 0) {
            //TODO: handle new group added notif and subscribe for the group. Also add group to group list
//            sendMessageNotification(messageReceivedData);
        }

        if (remoteMessage.getNotification() != null) {
            Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
        }
    }

    @Override
    public void onNewToken(String token) {
        Log.d(TAG, "New token generated: " + token);
        fcm_token = token;
//        sendRegistrationToServer(token, FirebaseInstanceId.getInstance().getId());
    }


    public boolean isGooglePlayServicesAvailable(Context context) {
        GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance();
        int resultCode = googleApiAvailability.isGooglePlayServicesAvailable(context);
        return resultCode == ConnectionResult.SUCCESS;
    }

Кроме того, добавьте следующее в свой build.gradle уровня приложения:

implementation 'com.google.firebase:firebase-messaging:20.1.2'

Добавьте следующее в свой манифест:

 <service
        android:name=".MyFirebaseMessagingService"
        android:exported="false">

После кода выше, Вы также должны добавить свой проект в свою учетную запись fcm. После добавления проекта вы получите файл google-services. json. Сохраните этот файл на C:\Users\{xyz}\AndroidStudioProjects\{your_app_name}\app\

Вы сможете получать все уведомления в методе обратного вызова onMessageReceived.

...