uni-app iPhone8 Plus勾选uniPush2.0的离线推送后闪退
uni-app iPhone8 Plus勾选uniPush2.0的离线推送后闪退
| 类别 | 信息 |
|---|---|
| 产品分类 | uniapp/App |
| PC开发环境 | Windows |
| PC操作系统版本 | Windows 10 教育版21H1 |
| HBuilderX类型 | Alpha |
| HBuilderX版本 | 4.02 |
| 手机系统 | iOS |
| 手机系统版本 | iOS 16 |
| 手机厂商 | 苹果 |
| 手机机型 | iPhone8 Plus |
| 页面类型 | vue |
| vue版本 | vue2 |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
示例代码:
//获取客户端唯一的推送标识
uni.getPushClientId({
success: (res) => {
console.log('推送设备ID:',res.cid);
let pushclientid = res.cid
uni.setStorageSync('pushclientid', pushclientid)
// 获取db引用
const db = uniCloud.database() //代码块为cdb
db.collection('userinfo')
.where('jwcode=="'+uni.getStorageSync('user').jwcode+'" && appid=="'+uni.getSystemInfoSync().appId+'"')
.get()
.then((res) => {
// res 为数据库查询结果
console.log(res)
let data = res.result.data;
let userData = uni.getStorageSync('user')
let appVersion = uni.getSystemInfoSync().appVersion
if(data == ''){
db.collection('userinfo')
.add({
jwcode: uni.getStorageSync('user').jwcode,
nickname: uni.getStorageSync('user').nickname,
avatar: uni.getStorageSync('user').img,
pushclientid: pushclientid,
appid: uni.getSystemInfoSync().appId,
lasttime: new Date().getTime(),
status: 1,
appversion: appVersion
})
.then(ress=>{
console.log(ress)
}).catch((errr)=>{
console.log(errr); // 打印错误码
})
}else if(data.nickname!=userData.nickname||data.avatar!=userData.img||data.pushclientid!=pushclientid||data.appversion!=appVersion){
db.collection('userinfo')
.where('jwcode=="'+uni.getStorageSync('user').jwcode+'" && appid=="'+uni.getSystemInfoSync().appId+'"')
.update({
jwcode: uni.getStorageSync('user').jwcode,
nickname: uni.getStorageSync('user').nickname,
avatar: uni.getStorageSync('user').img,
pushclientid: pushclientid,
appid: uni.getSystemInfoSync().appId,
lasttime: new Date().getTime(),
status: 1,
appversion: appVersion
})
.then(ress=>{
console.log(ress)
}).catch((errr)=>{
console.log(errr); // 打印错误码
})
}
}).catch((err)=>{
console.log(err); // 打印错误码
})
},
fail(err) {
console.log(err)
}
})
操作步骤:
App打开立马闪退,应该是push的注册就不行
预期结果:
App正常运行
实际结果:
App打开即闪退
bug描述:
App模块配置–>Push–>uniPush2.0–>离线推送,勾选之后,云端打包后的ipa在iPhone8 Plus上安装之后闪退,iPhone SE2装得iOS15没问题,iPhone 14Plus装得iOS17也没问题,另一台苹果设备也有问题(具体型号暂时没问),取消勾选uniPush2.0的离线推送就行,勾选上之后就闪退
更多关于uni-app iPhone8 Plus勾选uniPush2.0的离线推送后闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html
再补充一下,3月4日打的包还是正常的,3.7就不行了
更多关于uni-app iPhone8 Plus勾选uniPush2.0的离线推送后闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html
另一个闪退的iPad,系统也是iOS16.3(iPad mini5代)
是和微信支付或者支付宝支付有冲突,这两个去掉一个就正常了,麻烦给处理下行吗?Bug就没人负责的吗?
我也是一样的问题
你那个引了微信、支付宝支付,,还有离线推送了吗?我们的App一套代码打的国内和海外两个App,海外的就没事,国内的就不行,我打了一天的包,找到问题是支付和推送这块的,,官方就是不鸟我,。。。。
回复 ccsharecc: 我们定位出来也是推送的问题
感谢反馈,我联系一下相关负责人排查一下
这个闪退问题,我也提了。就是没人回应,我刚刚新建了一个空白的项目测试,就开了uniPush2.0,离线推送,然后云打包自定义基座,打开APP就直接闪退,IOS15,IOS17都没问题,IOS16就有问题,运行到标准基座可以打开。自定义基座不行,alpha4.03版本。https://ask.dcloud.net.cn/question/187730
在 uni-app 中使用 uniPush2.0 进行离线推送时,如果出现 iPhone8 Plus 勾选后闪退的问题,可能是由于以下原因导致的。以下是一些可能的解决方案和排查步骤:
1. 检查 uniPush2.0 配置
- 确保 uniPush2.0 的配置正确,包括:
manifest.json中的 uniPush 配置是否正确。- 是否在项目中正确集成了 uniPush2.0 的 SDK。
- 可以参考 uni-app 官方文档,检查配置是否符合要求。
2. 检查证书和 Provisioning Profile
- 确保 iOS 推送证书(包括开发环境和生产环境)已正确配置。
- 检查项目的
Provisioning Profile是否包含推送权限。 - 如果证书有问题,可能导致推送功能异常,甚至闪退。
3. 检查代码兼容性
- 检查项目中是否有不兼容的代码或插件,尤其是与 uniPush2.0 相关的代码。
- 确保调用 uniPush2.0 的 API 时没有传递错误参数或未处理的异常。
4. 检查 iOS 系统版本
- 确保 iPhone8 Plus 的系统版本支持 uniPush2.0 的功能。
- 如果系统版本过低,可能会导致某些功能异常或闪退。
5. 查看日志
- 使用 Xcode 连接 iPhone8 Plus,运行项目并查看控制台日志。
- 查找闪退时的错误信息,通常会提示具体的异常原因。
- 如果日志中看到与 uniPush2.0 相关的错误,可以针对性地解决问题。
6. 更新 uni-app 和 uniPush2.0 版本
- 确保使用的是最新版本的 uni-app 和 uniPush2.0。
- 旧版本可能存在已知的 Bug,更新到最新版本可能会修复问题。
7. 测试其他设备
- 在其他 iOS 设备上测试,看是否同样出现闪退问题。
- 如果仅 iPhone8 Plus 出现闪退,可能是设备特定的问题。
8. 联系 uni-app 官方支持
- 如果以上方法无法解决问题,可以联系 uni-app 官方技术支持,提供详细的错误日志和复现步骤,寻求帮助。
示例代码检查
以下是一个 uniPush2.0 的基本配置示例,确保代码无误:
// manifest.json
{
"app-plus": {
"distribute": {
"ios": {
"push": {
"unipush": {
"enabled": true
}
}
}
}
}
}
// 调用 uniPush2.0 的 API
uni.getPushProvider({
success: (res) => {
console.log('Push provider:', res);
},
fail: (err) => {
console.error('Failed to get push provider:', err);
}
});


