使用钉钉h5微应用jsapi,获取位置信息报错,第一次调用时成功,第二次开始就报错"errorCode":7,"errorMessage":"No permission info for action:device.geolocation.get"。再刷新页面又是第一次可以,然后又不行。目前看是安卓手机会有这样的问题,苹果暂时没发现问题。拜托帮忙看一下
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
问题描述: 您在使用钉钉H5微应用的JSAPI获取位置信息时遇到错误,具体表现为第一次调用成功,但从第二次开始报错,错误信息为:"errorCode":7,"errorMessage":"No permission info for action:device.geolocation.get"。此问题在安卓设备上复现,而iOS设备未发现相同问题。
可能原因:
解决步骤:
检查权限申请逻辑:确保您的应用在每次需要获取位置信息前都正确地请求了用户的位置权限,并且在用户同意后妥善保存了权限状态。参考钉钉JSAPI文档确认device.geolocation.get
的调用规范和权限管理要求。
权限持久化处理:在用户首次授权后,您可能需要在客户端存储中记录这一权限状态,确保即使页面刷新或应用重启也能恢复已获取的权限信息。可以考虑使用LocalStorage或Cookie来实现这一点。
控制调用频率:如果存在调用频率过高的问题,可以在代码中加入逻辑,限制连续调用获取位置信息的频率,比如通过setTimeout设置最小间隔时间。
清除应用数据测试:在安卓设备上尝试清除应用数据(非卸载),模拟首次安装的状态,观察是否能重现问题,这有助于判断是权限管理还是其他因素导致的问题。
日志监控:在应用中增加日志记录,特别是在位置权限请求前后,记录详细的权限状态和操作流程,以便更精确地定位问题所在。
示例代码(权限申请示例):
if (window.dd && window.dd.device && window.dd.device.geolocation) {
window.dd.device.geolocation.get({
timeout: 3000,
cache: true,
success: function(res) {
console.log('当前位置信息:', res);
},
fail: function(err) {
console.error('获取位置失败:', err);
}
});
} else {
console.error('device.geolocation API不可用');
}
注意事项:
请按照上述步骤逐一排查并尝试解决方案,若问题依旧无法解决,建议收集详细日志及设备信息,并联系钉钉技术支持获取进一步帮助。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。