java - 如果使用 iPhone 配置 watch ,FCM 推送通知无法在 WearOS 上运行

标签 java android firebase-cloud-messaging wear-os

我正在为 Android Wear-OS 开发一个实时聊天应用程序。我正在使用 Tic Watch Pro 4G 进行开发测试。我的应用程序已在 Wear-OS Play 商店中发布,名称为“IoSite”

对于推送通知,我使用 FCM。我有两 block watch

案例 1:如果我使用 Android 手机配置 watch 并从 Play 商店下载 IoSite 应用程序,则 FCM 推送通知在两个 watch 中均有效。

情况2:如果我使用iPhone配置 watch 。然后当我将 IoSite 应用程序下载到 watch 1 并尝试使用它时。然后 FCM 推送通知就可以正常工作。然后我在 watch 2 中下载了 IoSite 应用程序并尝试使用它。 FCM 推送通知在 watch 二中运行良好。但是在 watch 2 中安装应用程序后,FCM 推送通知在 watch 1 中停止工作。下面是应用程序尝试获取 firebase instance-id 时的 Android studio 日志:

2020-02-14 16:39:39.455 9476-9662/com.iosite.iositewatchapp W/FirebaseInstanceId: Token retrieval failed without exception message. Will retry token retrieval 2020-02-14 16:39:39.459 9476-9476/com.iosite.iositewatchapp W/MyFirebaseMessagingService: getInstanceId failed java.io.IOException: SERVICE_NOT_AVAILABLE at com.google.firebase.iid.zzl.zza(com.google.firebase:firebase-iid@@20.0.2:71) at com.google.firebase.iid.zzl.zza(com.google.firebase:firebase-iid@@20.0.2:84) at com.google.firebase.iid.zzp.then(com.google.firebase:firebase-iid@@20.0.2:4) at com.google.android.gms.tasks.zzd.run(Unknown Source:5) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:764)

在此 watch 1 中,如果我尝试删除InstanceID(以便 FCM SDK 生成新 ID),则会收到以下错误:

2020-02-14 16:39:39.461 9476-9476/com.iosite.iositewatchapp W/System.err: at com.google.firebase.iid.FirebaseInstanceId.deleteInstanceId(com.google.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.iositewatchapp.Services.MyFirebaseMessagingService$2.onComplete(MyFirebaseMessagingService.java:407)

请提出解决方案。

最佳答案

    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'

将以下内容添加到您的 list 中:

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

在上面的代码之后,您还需要将您的项目添加到您的 fcm 帐户中。添加项目后,您将获得一个 google-services.json 文件。将该文件保存在 C:\Users\{xyz}\AndroidStudioProjects\{your_app_name}\app\

您应该能够在回调方法onMessageReceived中接收所有通知。

关于java - 如果使用 iPhone 配置 watch ,FCM 推送通知无法在 WearOS 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60239810/

相关文章:

ios - 通知未通过 Firebase 控制台发出

java - Java Swing href 的问题

java - 删除节点

java - 这是最好的方法吗?有更干净的方法吗?

usb - Wakelock 仅适用于连接的 USB 电缆

android - 是否可以为 Flutter 的辅助焦点系统强制平滑隐式滚动?

java - 如何从后端创建关于 Spring Security 的 session ?

android - 如何在 Eclipse 中关闭 ADB 控制台的自动显示?

android - 在 Firebase 控制台上查看发送的消息

android - 从 FCM 通知访问、打开或编辑 Web View