uni-app个推问题,client_id在什么场景下会变更?
uni-app个推问题,client_id在什么场景下会变更?
问题说明
我们的业务不限制设备登录,却允许多平台登录,即同一个客户既可能用苹果,也可能用安卓,且可以保持登录同一账户同时使用;现在后端同学发现,在现有app上报的client_id信息中,会出现频繁变更的问题;即后端同学不清楚,到底给那一台设备去推送消息;安卓和苹果都会有这个问题。
RT,在什么场景下会变更?是否有文档?可以枚举出有哪些场景吗?
- 打新基座会 client_id 会变了?
- 打新版本正式包 client_id 会变吗?
- client_id 是不是有自动刷新的逻辑呢?
所以现在的诉求是,希望官方明确告知 ,client_id 会在哪些场景下变更
client_id变更的可能性很低,只有在应用卸载后再重新安装才可能变更。
90天及以上客户端不联网才会过期,uni-id-pages 的做法是每次 本地token刷新(含 token 续期时和账号登录时)会把客户端的 push cid 上报到自己的服务器和 user_id 做一个映射管理
卸载,超期都会变
因为我们这边的后端是用的java,登录情况跟你是一样,也是什么设备都可以登录,也是可以多个人同时登录
我们这边的做法,就是获取设备的唯一码,但是有些设备获取不到就没办法了。
登录时,表里新增一条数据,有用户id,cid,设备唯一码等,
退出登录的时候会根据cid和设备唯一码去删除
登录的时候,也会去根据设备唯一码去库里查
获取设备唯一码,就根据下面这几个去判断安卓还是ios,或者是版本号啥的判断获取的
plus.device.imei
plus.device.getOAID
plus.device.getInfo
在uni-app中集成个推(Getui)进行消息推送时,client_id
是用于标识客户端设备的唯一标识符。了解 client_id
在哪些场景下会变更对于确保推送服务的稳定性和准确性至关重要。以下是一些可能导致 client_id
变更的场景及相应的代码处理示例:
1. 设备重新安装应用
当用户在设备上重新安装应用时,client_id
通常会重新生成。这是因为重新安装应用相当于清除了应用的所有本地数据和缓存,包括之前的 client_id
。
处理示例:
// 在应用启动时初始化个推
uni.getSetting({
success: function(res) {
if (res.authSetting['scope.userInfo']) {
// 获取新的 client_id
const client = uni.requireNativePlugin('Getui');
client.getClientId({
success: function(clientIdResult) {
const clientId = clientIdResult.clientId;
// 保存 clientId 到服务器或本地存储
uni.setStorageSync('clientId', clientId);
console.log('New client_id:', clientId);
},
fail: function(err) {
console.error('Failed to get client_id:', err);
}
});
} else {
// 处理未授权情况
}
}
});
2. 设备恢复出厂设置
设备恢复出厂设置会清除所有用户数据和应用程序数据,因此 client_id
也会重新生成。
处理逻辑:
与重新安装应用类似,在应用启动时重新获取并保存 client_id
。
3. 清理应用数据
用户手动清理应用数据(如通过设备设置中的“应用管理”清除数据)也会导致 client_id
变更。
处理逻辑:
同样,在应用启动时重新获取并保存 client_id
。
4. 系统或应用升级
一般情况下,系统或应用升级不会改变 client_id
,但如果在升级过程中涉及到数据迁移或清理,则可能导致 client_id
变更。
处理逻辑:
在应用升级后的首次启动时,检查并重新获取 client_id
。
总结
为了确保推送服务的准确性,建议在每次应用启动时都尝试获取 client_id
并与服务器上的记录进行比对。如果 client_id
发生变化,及时更新服务器上的记录。上述代码示例展示了如何在 uni-app 中获取 client_id
并保存到本地存储,但实际应用中还需考虑网络请求、错误处理以及用户隐私保护等因素。