uni-app unipush2.0 在三星手机中能触发uni.onPushMessage,但是无法唤起app
uni-app unipush2.0 在三星手机中能触发uni.onPushMessage,但是无法唤起app
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Mac | macOS Sonoma 14.1 | CLI |
产品分类:uniapp/App
PC开发环境操作系统:Mac
手机系统:Android
手机系统版本号:Android 14
手机厂商:三星
手机机型:Galaxy S22
页面类型:vue
vue版本:vue2
打包方式:离线
CLI版本号:3.98
App下载地址或H5网址: https://www.pgyer.com/fd465fe2e4a07c92d0a5c28073060498
示例代码:
hbuilder代码
// 添加app push监听事件(需注册到app onLaunch中)
export function addAppPushEventListener() {
//#ifdef APP-PLUS
console.log("注册app push event listener");
uni.onPushMessage(async (res) => {
console.log("uni.onPushMessage 接收到消息事件", res); //监听推送消息
const {
type,
data
} = res;
if (type === "click") {
console.log("uni.onPushMessage 点击消息回调,唤端成功");
pushMessageClickCallBack(data);
}
});
//#endif
}
安卓离线工程配置
因要上架google play, 所以按照google最新要求, 升级targetSdkVersion到了34
```groovy
defaultConfig {
applicationId "com.cafe24.ec.pluslooxloo24"
minSdkVersion 26
targetSdkVersion 34
versionCode 2410284
versionName "2.4.10284"
multiDexEnabled true
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
ndk {
// 注意!上架Google Play市场对CPU类型的要求不能包含"x86"
abiFilters "armeabi-v7a", "arm64-v8a"
}
}
安卓离线工程debug日志
当在三星手机app上debug, 点击消息通知后, 日志中出现了如下报错, 然后就无法唤起app
```plaintext
2024-10-28 21:06:01.674 2266-4989 NotificationService system_server E Indirect notification activity start (trampoline) from com.cafe24.ec.pluslooxloo24 blocked
2024-10-28 21:06:01.674 2266-4989 NotificationService system_server E Indirect notification activity start (trampoline) from com.cafe24.ec.pluslooxloo24 blocked
操作步骤:
- 调用unipush2.0的服务器端api发送在线消息通知
- 三星手机端接收消息通知
- 点击收到的消息通知
预期结果:
1. app中接收到消息通知的点击事件
2. 唤起app到前台
实际结果:
- app中接收到消息通知的点击事件
- 唤起app到前台失败
bug描述:
app开发中使用了unipush2.0, 并且是以离线工程的方式进行打包
在三星系列手机上, 出现了” 能收到push消息通知, 点击push消息, app也能触发push事件回调, 但是push消息无法唤起app “的情况
其他国产手机未发现此类问题 (国产手机的os系统版本也是Android 14)
bug在三星手机app端的表现可见下方的视频链接
[阿里云盘地址: 点击消息通知唤起app失败,但能收到消息事件的录屏](https://www.alipan.com/s/Ls4xRRMJCjm)
HBuilderX 4.33.2024111702-alpha 已修复。
在处理uni-app的uniPush 2.0在特定设备(如三星手机)中能够接收到推送消息(触发uni.onPushMessage
),但无法自动唤起应用的问题时,通常需要考虑几个关键方面:推送消息的类型、系统权限设置、以及应用自身的处理逻辑。以下是一个简化的代码示例和配置检查步骤,帮助你诊断并可能解决问题。
1. 确保推送消息类型正确
首先,确保你发送的是具有唤醒应用能力的推送消息。在uniPush中,通常这意味着消息需要包含特定的字段,如data
或aps
(对于iOS)中的content-available
设置为1。
2. 检查Android权限和系统设置
对于Android设备,确保应用已授予必要的权限,特别是自启动权限和电池优化白名单。三星手机可能有额外的电源管理设置需要调整。
3. uni-app代码示例
确保你的manifest.json
中已正确配置了uniPush:
"mp-weixin": {
"appid": "your-app-id",
"setting": {
"urlCheck": false
},
"usingComponents": true
},
"uniPush": {
"appid": "your-uni-push-appid",
"secret": "your-uni-push-secret"
}
在App.vue
中监听推送消息:
export default {
onLaunch() {
// 监听推送消息
uni.onPushMessage((res) => {
console.log('收到推送消息', res.data);
// 尝试唤起应用逻辑,如跳转到特定页面
if (uni.getSystemInfoSync().platform === 'android') {
// 对于Android,可能需要额外的逻辑来确保应用在前台或处理后台启动
if (!this.isAppShow()) {
uni.showToast({
title: '应用已被唤醒',
icon: 'none'
});
// 执行唤醒后的逻辑,如跳转页面
uni.navigateTo({
url: '/pages/index/index'
});
}
}
});
},
methods: {
isAppShow() {
const pages = getCurrentPages();
const currentPage = pages[pages.length - 1];
return currentPage.route === '你想要检查的页面路径';
}
}
}
4. 调试和日志
增加日志输出,帮助理解推送消息是否被正确接收以及应用状态。如果问题依旧存在,考虑使用三星手机的开发者选项中的日志工具或ADB日志来获取更详细的错误信息。
5. 额外注意事项
- 确保应用版本是最新的,因为老版本可能存在已知的兼容性问题。
- 检查是否有第三方应用(如电池管理、安全软件)阻止了应用的正常唤醒。
通过上述步骤,你应该能够更清晰地定位问题所在,并采取相应的措施解决在三星手机上无法唤起应用的问题。