uni-app FCM离线推送正常能收到消息但点击消息无法打开app

发布于 1周前 作者 gougou168 来自 Uni-App

uni-app FCM离线推送正常能收到消息但点击消息无法打开app

开发环境 版本号 项目创建方式
Windows Windows10 64位操作系统 HBuilderX

示例代码:

uni push2.0 配置了FCM 离线推送正常 能收到消息 但是点击消息无法打开app

操作步骤:

推送相关权限都打开了 谷歌三件套也有 正常收离线通知 但是无法唤起app

预期结果:

正常唤起app

实际结果:

不能打开app

bug描述:

uni push2.0 配置了FCM 离线推送正常 能收到消息 但是点击消息无法打开app


6 回复

麻烦各位大佬帮忙看看


官方就没人看一下吗

uni-push1.0也遇到了,官方能看下这个问题吗

您好,我现在对接后,FCM的离线消息都收不到,ios以及国内其他厂商的都可以,请问您FCM对接的时候有啥特别注意的点吗?

我这边试了下,可以确定的是国外的手机装了google play三件套,并且app是已经发布google play商店的可以收到。

在处理uni-app FCM(Firebase Cloud Messaging)离线推送时,如果消息能够正常收到但点击消息无法打开应用,通常是由于推送消息中的点击行为(click_action)配置不正确或未配置相应的AndroidManifest.xml和iOS配置文件。以下是一个针对Android和iOS平台的具体解决方案示例,包括必要的代码配置。

Android平台

  1. 确保在AndroidManifest.xml中配置了正确的Activity和Intent Filter
<activity
    android:name=".YourMainActivity"
    android:label="@string/app_name"
    android:launchMode="singleTask"
    android:theme="@style/AppTheme.NoActionBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <!-- FCM Click Action -->
    <intent-filter>
        <action android:name="YOUR_PACKAGE_NAME.FCM_CLICK_ACTION" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

其中YOUR_PACKAGE_NAME.FCM_CLICK_ACTION需要与你在FCM服务器发送消息时设置的click_action一致。

  1. 在发送FCM消息时设置正确的click_action
{
  "to": "YOUR_DEVICE_TOKEN",
  "notification": {
    "title": "Hello",
    "body": "World",
    "click_action": "YOUR_PACKAGE_NAME.FCM_CLICK_ACTION"
  },
  "data": {
    "key1": "value1"
  }
}

iOS平台

  1. 确保在AppDelegate.m中处理了UNUserNotificationCenterDelegate
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    if (application.applicationState == UIApplicationStateInactive || application.applicationState == UIApplicationStateBackground) {
        // Handle notification when app is in background or inactive
        NSString *clickAction = userInfo[@"gcm.notification.click_action"];
        if ([clickAction isEqualToString:@"YOUR_IOS_CLICK_ACTION"]) {
            // Open specific view controller
        }
    }
    completionHandler(UIBackgroundFetchResultNewData);
}

注意:iOS没有像在Android中那样直接设置click_action的字段,但你可以通过检查userInfo字典中的自定义键来识别点击动作。

  1. 在发送FCM消息时,可以通过apns字段添加自定义数据
{
  "to": "YOUR_DEVICE_TOKEN",
  "notification": {
    "title": "Hello",
    "body": "World"
  },
  "apns": {
    "payload": {
      "aps": {
        "content-available": 1
      },
      "custom_key": "custom_value",
      "click_action": "YOUR_IOS_CLICK_ACTION"  // 虽然iOS不直接识别,但可用于应用内逻辑处理
    },
    "headers": {
      "apns-priority": "10"
    }
  }
}

通过上述配置,确保在Android和iOS平台上点击FCM推送消息时能够正确打开应用或导航到指定页面。

回到顶部