在uni-app中,您可以使用plus.push.getClientInfo方法获取客户端的推送信息,其中包括设备的唯一标识CID。但是,由于CID可能会因为某些原因而改变(例如用户卸载并重新安装应用程序),因此您需要在应用程序启动时稳定地获取CID。

以下是一种稳定获取CID的方法:

// 在应用程序启动时获取CID
var cid = null;
document.addEventListener('plusready', function() {// 获取客户端推送信息var clientInfo = plus.push.getClientInfo();// 获取CIDcid = clientInfo.clientid;
});// 定时检查CID是否改变
setInterval(function() {if (cid !== null) {var clientInfo = plus.push.getClientInfo();var newCid = clientInfo.clientid;// 如果CID发生了改变,则重新获取CID并更新相关操作if (newCid !== cid) {cid = newCid;// 进行相关操作,例如重新注册推送服务等等}}
}, 5000);

在上述代码中,我们在应用程序启动时使用document.addEventListener(‘plusready’, function(){…})方法来监听plusready事件,当该事件被触发时,说明plus对象已经被正确初始化,我们可以安全地调用plus.push.getClientInfo()方法获取客户端推送信息,并将CID保存在变量cid中。

然后,我们使用setInterval方法定时检查CID是否发生了改变,如果CID发生了改变,则重新获取CID并执行相关操作。请注意,在实际应用中,您需要根据具体情况来设置检查CID的时间间隔。

当然可以进一步优化,以下是优化后的代码:

// 获取CID
function getCid(callback) {// 如果已经获取过CID,则直接返回if (getCid.cid) {callback(getCid.cid);return;}// 注册plusready事件监听document.addEventListener('plusready', function() {// 获取客户端推送信息var clientInfo = plus.push.getClientInfo();// 获取CIDvar cid = clientInfo.clientid;// 缓存CIDgetCid.cid = cid;// 调用回调函数callback(cid);});
}// 在应用程序启动时获取CID
getCid(function(cid) {// 进行相关操作,例如注册推送服务等等
});// 定时检查CID是否改变
setInterval(function() {getCid(function(cid) {// 进行相关操作,例如重新注册推送服务等等});
}, 5000);

在上述代码中,我们定义了一个getCid方法来获取CID,并使用了闭包来缓存已经获取过的CID,避免重复获取CID的操作。在应用程序启动时,我们调用getCid方法来获取CID并执行相关操作。然后,我们使用setInterval方法定时检查CID是否发生了改变,并在CID发生改变时重新获取CID并执行相关操作。

请注意,在实际应用中,您可能需要进一步优化上述代码,例如添加错误处理、调整定时检查CID的时间间隔等等。

如果在移动设备上无法使用document.addEventListener方法,您可以考虑使用plusReady事件来代替。而在uni-app中,由于它是基于H5和Webview技术封装的,所以可以直接在uni-app中使用plus对象的API,而不需要等待plusready事件。因为uni-app已经将plus对象在应用启动时进行了初始化。

以下是获取CID的代码示例:

// 获取CID
function getCid(callback) {// 如果已经获取过CID,则直接返回if (getCid.cid) {callback(getCid.cid);return;}// 获取客户端推送信息var clientInfo = plus.push.getClientInfo();// 获取CIDvar cid = clientInfo.clientid;// 缓存CIDgetCid.cid = cid;// 调用回调函数callback(cid);
}// 在应用程序启动时获取CID
getCid(function(cid) {// 进行相关操作,例如注册推送服务等等
});// 定时检查CID是否改变
setInterval(function() {getCid(function(cid) {// 进行相关操作,例如重新注册推送服务等等});
}, 5000);

可以使用异步方式获取CID。您可以通过将plus.push.getClientInfoAsync()方法包装在一个Promise对象中来异步获取CID。下面是一个示例代码:

// 异步获取CID
function getCidAsync() {return new Promise(function(resolve, reject) {// 获取客户端推送信息plus.push.getClientInfoAsync(function(clientInfo) {// 获取CIDvar cid = clientInfo.clientid;// 调用resolve方法返回CIDresolve(cid);}, function(error) {// 获取CID失败,调用reject方法返回错误信息reject(error);});});
}// 使用异步方式获取CID
getCidAsync().then(function(cid) {// 进行相关操作,例如注册推送服务等等
}).catch(function(error) {// 获取CID失败,进行错误处理
});

uniapp怎么稳定获取cid相关推荐

  1. php怎么获取cid,Typecho根据文章cid获取文章信息

    如上图,就是基于这个功能,实现的轮播图,填写了文章cid,获取了文章标题,描述,缩略图和链接. 其实这个功能,应该有很多人发过,不过大多都是需要写查询函数的,我呢因为懒,所以经过试验发现了这种不用自己 ...

  2. uni-app利用uniCloud获取微信步数并将数据写入数据库

    uni-app利用uniCloud获取微信步数并将数据写入数据库 本项目依赖了uni-id 只是毕业设计,想法不完善,没有对用户授权失败做处理,如果编写的时候需要注意 第一步:调用wx.login() ...

  3. 稳定获取Android设备唯一码(UUID)的解决方案

    最近做的一个项目中需要用到Android设备唯一码(UUID)来标识一台设备, Android中设备唯一码有很多,如:MAC地址.IMEI号(DeviceId).IMSI号.ANDROID_ID.序列 ...

  4. uni-app 小程序获取实时定位和车辆签到(wx.onLocationChange方法)

    1.需求描述 实现一个车辆定位签到功能,获取当前车辆的实时定位,当车辆到达签到点1公里范围内时,可以进行签到,当大于1公里时,禁止签到.同时用户还可以手动刷新定位.         2.wx.getL ...

  5. uni-app 小程序获取实时定位和车辆签到(wx.getLocation方法)

    一.需求描述 实现一个车辆定位签到功能,获取当前车辆的实时定位,当车辆到达签到点1公里范围内时,可以进行签到,当大于1公里时,禁止签到.同时用户还可以手动刷新定位. 二.wx.getLocation ...

  6. uniapp 从相机获取照片

    需求: 人脸识别功能需要启用 uniapp 相机功能获取照片,返回照片消息传给第三方接口进行人脸验证. 问题: unapp 可以正常启用相机进行拍照,但是无法显示照片 原因: 正常流程:返回图片信息调 ...

  7. 淘宝稳定获取商品主图,JAVA代码示例纯技术交流

    前段时间在技术交流群,大家有探讨稳定获取淘宝商品主图.价格.标题,及sku的完整解决方案.这个引起了我技术挑战的兴趣. 目前,自己做了压测,QPS高.出滑块概率极低,API整体稳定,可满足业务场景的性 ...

  8. uniapp ios时间戳获取不到_uni-app打包编译成安卓及ios包并上传发布测试版

    个人公众号:微信搜索:前端速成记 uni-app是vue党开发一套代码编译(8个)各种平台的解决方案 官网:(https://uniapp.dcloud.io/) 开发特点: 1.是一套ui(及简单) ...

  9. uni-app注册自动获取短信信息

    uni-app实现app发送短信和读取短信 1.发送短信 uni-app没有对应API的接口,如果想实现发送短信的功能可以借助HTML5+ API的方式,使用发送短信接口,直接跳转到手机发送短信页面, ...

最新文章

  1. firefox 自定义快捷键
  2. Oracle数据库—— 事务处理与并发控制
  3. Ubuntu 中安装 Oracle 10g
  4. 【匈牙利算法】指引(jzoj 2319)
  5. linux下挂载samba服务器,Linux使用mount挂载samba共享
  6. PHP----练习-----新闻管理----增删改查
  7. 【快速入门Linux】6_Linux命令—用户权限相关命令
  8. 计算机应用培训课程安排表,计算机培训教学计划
  9. ERP知识普及连载(21)
  10. rabbitmq重装之后无法加入原有cluster的bug解析
  11. Mac下Eclipse SVN 更换账号
  12. CSS案例2:用定位是实现三级导航
  13. Linux 离线安装本地rpm的命令
  14. TARA-基于J3061的概念阶段流程
  15. rose怎么画业务流程图_子流程图怎么画(流程图中的子流程)
  16. Html5红警源码,现在,你真的可以在网页上玩到原版《红警2》了
  17. 如何切换到root用户
  18. HDU 6833 莫比乌斯反演 + 数论分块
  19. 有关网络通信的基本概念
  20. 烟台理工学校计算机专业,烟台理工学校都有哪些专业

热门文章

  1. 豌豆淘讲分析会员制,企业为何要做会员营销?
  2. mac kafka安装
  3. 斩杀线计算大师 三元一次方程解
  4. nacos + seata
  5. c语言递归求和函数,c语言递归算法怎么实现
  6. Select下拉框onchange事件
  7. 鲁棒优化入门(二)——基于matlab+yalmip求解鲁棒优化问题
  8. android studio logcat 配置颜色
  9. oracle trace跟踪,oracle数据库跟踪工具 — oracle-tech
  10. android各个分区详解