SDK相关FAQ

本文为您介绍了号码认证服务的不同功能下使用SDK的常见问题及解决方法。

目录

问题分类

具体问题

移动端SDK(iOS/Android)

环境检测与初始化

问题1:checkEnvAvailable函数返回false?

问题2:初始化接口checkEnvAvailableWithComplete一直返回NO?

一键登录功能

问题3:首次取号时,App网络通信正常,但号码认证一直失败?

问题4:Android双卡手机一键登录过程中,使用哪张移动数据卡进行认证?

问题5:中国联通5G移动数据导致一键登录获取本机号码失败?

问题6:登录Token存在失败吗?

问题7:一键登录服务支持哪些网络环境?

问题8:经常超时怎么办?

本机号码校验功能

问题9:获取Token失败,一般有哪些原因?

错误码与异常处理

问题10:返回错误码600005,手机终端不安全有哪些原因?

问题11:什么情况下会返回600005页面非法修改?

问题12:移动卡请求一键登录不成功,常见报错日志及解决方法

问题13:移动卡出现crash【[UAReachability reachableType]: unrecognized selector sent to instance】,该怎样解决?

权限与配置

问题14:若出现权限相关问题,该怎样做?

问题15:内存泄漏的种类有哪些?为什么会出现内存泄漏?

H5 SDK

问题16:为什么使用中国联通4G网络,依然获取不到本机号码校验Token?

后端API

问题17:后端API调用失败,如何排查?

通用问题

密钥与安全

问题18:setAuthSDKInfo的密钥如何获取?

问题19:SDK使用过程的安全性如何保障?

网络环境

问题20:支持哪些网络环境?

性能与稳定性

问题21:如何提高SDK的稳定性和成功率?

移动端SDK(iOS/Android)

环境检测与初始化

问题1:checkEnvAvailable函数返回false?

可能原因:

  • 未插入SIM

  • 未开启移动数据

  • 网络权限未开启

解决方法:

  1. 检查是否插入SIM

  2. 检查是否开启移动数据

  3. 检查App的网络权限配置

问题2:初始化接口checkEnvAvailableWithComplete一直返回NO?

排查顺序:

  1. SIM卡状态检查

    • 手机SIM卡是否处于已激活、不欠费的状态

    • 手机SIM卡的移动数据是否开启

  2. App权限检查

    • App的网络权限是否开启

    • Android:检查是否同时拥有WLAN和移动数据网络权限

  3. 网络环境检查

    • 设备是否有代理(VPN)

    • 开启VPN时,一键登录会出现以下错误:

      • 中国联通:源IP错误

      • 中国电信:800008错误

      • 中国移动:103111错误

    • 解决方法:关闭VPN或打开飞行模式再关闭后重试

  4. 配置检查

    • 云控制台上是否创建了方案号

    • 创建方案号中的BundleID是否与项目中使用的保持一致

    • 设备时间设置是否标准(不能修改手机时间戳提前或延期)

    • 是否调用了setAuthSDKInfo接口

一键登录功能

问题3:首次取号时,App网络通信正常,但号码认证一直失败?

可能原因:

  • SIM卡欠费,无法通过移动数据上网

  • Android某些厂商系统,Wi-Fi网络权限与移动数据网络权限分开管理,App可能只有WLAN权限,缺少移动数据网络权限

解决方法:

  1. 检测SIM卡是否欠费,能否通过移动数据上网

  2. Android:检查App是否同时拥有WLAN和移动数据网络权限

问题4:Android双卡手机一键登录过程中,使用哪张移动数据卡进行认证?

使用默认移动数据卡进行一键登录认证。

问题5:中国联通5G移动数据导致一键登录获取本机号码失败?

解决方法:

networkSecurityConfig清单文件中配置联通域名enrichgw.10010.com

配置示例:

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">enrichgw.10010.com</domain>
    </domain-config>
</network-security-config>

问题6:登录Token存在失败吗?

存在失败情况:

  • 偶然出现:由于网络波动导致网关断开、网络不可用、供应商服务端异常、业务方服务端异常等因素

  • 持续出现:需要运营商协助排查来解决问题

问题7:一键登录服务支持哪些网络环境?

  • 推荐环境:4G4G+Wi-Fi

  • 不推荐:2G3G网络下接口请求失败或超时概率较高

三大运营商支持的网络环境:

  • 中国移动:4G、5G

  • 中国联通:4G、5G(需配置域名)

  • 中国电信:4G、5G

问题8:经常超时怎么办?

排查步骤:

  1. 基础检查

    • 确保SIM卡没欠费

    • 通过Safari打开某个网址确认移动网络是否正常

    • 确认超时时间(单位:s)是否设置正确,建议3000 ms~5000 ms

  2. 可能原因

    • 2G3G网络下接口请求失败或超时概率较高

    • 切换网络过程中网络不稳定,出现超时的概率较大

本机号码校验功能

问题9:获取Token失败,一般有哪些原因?

  1. 网络环境

    • 手机设置检测网络,三大运营商网络在4G网络成功率较高

    • 接口超时时间是否过短,建议3000 ms~5000 ms

  2. SIM卡状态

    • 检测SIM卡是否欠费

    • 检查网络设置,是否可以移动数据网络上网

  3. 网络稳定性

    • 在切换SIM卡过程中,需要等网络稳定后,再使用认证登录功能

错误码与异常处理

问题10:返回错误码600005,手机终端不安全有哪些原因?

可能原因:

  • 手机网络是否连接了代理

  • 手机是否处于hook状态,或者安装了相关的hook框架

  • App是否处于attached状态

  • 手机是否被root

  • 是否在模拟器环境中运行

  • App是否处于调试状态(使用getReporter.setLoggerEnable(true)可以关闭此项检测)

问题11:什么情况下会返回600005页面非法修改?

添加悬浮窗控件遮挡隐私协议、一键登录按钮以及掩码,或将字体颜色设置为透明,SDK会回调600005页面非法修改。

问题12:移动卡请求一键登录不成功,常见报错日志及解决方法

报错日志

解决方法

ontokenfaild{"code":"600011","msg":"vendorCode:200025, msg获得的手机授权码失败:{\\"resultCode\\":\\"200025\\",\\"authType\\":\\"1\\",\\"authTypeDes\\":\\"WIFI下网关鉴权\\",\\"resultDesc\\":\\"发生未知错误\\"}","requestCode":0,"vendorName":"CMCC"}

检查依赖v4com.android.support:support-v4版本是否高于25.4.0或者v7com.android.support:appcompat-v7版本是否高于25.4.0

ontokenfaild{"code":"600011","msg":"vendorCode:200028, msg获得的手机授权码失败:{\\"resultCode\\":\\"200028\\",\\"authType\\":\\"1\\",\\"authTypeDes\\":\\"网络鉴权\\",\\"resultDesc\\":\\"网络异常\\"}","requestCode":0,"vendorName":"CMCC"}

检查清单文件application标签下是否配置了android:usesCleartextTraffic="true"android:networkSecurityConfig文件。如果设置了networkSecurityConfig文件,请在networkSecurityConfig文件里面配置相关域名

networkSecurityConfig配置示例:

<application
    android:name=".DemoApplication"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    android:usesCleartextTraffic="true"
    android:networkSecurityConfig="@xml/config"
    android:requestLegacyExternalStorage="true">
</application>

<!-- network-security-config.xml -->
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">enrichgw.10010.com</domain> <!-- 联通内部5G请求域名 -->
        <domain includeSubdomains="true">onekey.cmpassport.com</domain> <!-- 移动内部请求域名 -->
    </domain-config>
</network-security-config>

问题13:移动卡出现crash【[UAReachability reachableType]: unrecognized selector sent to instance】,该怎样解决?

解决方法(iOS):

在主工程中单击Project,选择Edit Active Target > Build Settings > Linking > Other Linker Flags,添加**-all_load-ObjC**。

权限与配置

问题14:若出现权限相关问题,该怎样做?

检查步骤:

  1. 检查App的权限是否可以正常申请

  2. 正常引用aar,权限会自动merge

  3. 若权限没有merge,需要手动添加如下权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

问题15:内存泄漏的种类有哪些?为什么会出现内存泄漏?

1. Toast内存泄漏

  • 原因1:协议没勾选点击一键登录按钮显示Toast,退出授权页出现内存泄漏

    • 解决方法:使用AuthUIConfig.setLogBtnToastHidden(true)隐藏默认Toast,根据点击事件的code自己显示Toast即可

  • 原因2:页面非法修改,当授权页号码栏、一键登录Button、协议栏出现重叠或者遮挡时点击一键登录按钮,显示Toast页面非法修改

    • 解决方法:可通过查看图层解决重叠问题

2. TokenResultListener内存泄漏

  • 原因:SDK内部会持有外部设置进来的TokenResultListener

  • 解决方法:在一键登录功能使用完毕之后通过PhoneNumberAuthHelper.setAuthListener(null)将回调置空即可

H5 SDK

问题16:为什么使用中国联通4G网络,依然获取不到本机号码校验Token?

可能原因:

  1. 使用了物联网卡

    • 物联网卡通过装置在各类物体上的SIM卡、传感器、二维码等,经过接口与无线网络连接,可以实现人与物体、物体与物体间的沟通和对话

    • 物联网卡不支持本机号码校验功能

  2. 网络接入点问题

    • 中国联通不支持接入点为wap的网络取号

  3. 浏览器问题

    • UCQQ浏览器开启免流模式可能会导致取号不成功

解决方法:

  • 确认使用的是普通SIM卡,非物联网卡

  • 检查网络接入点设置

  • 关闭浏览器的免流模式,或使用其他浏览器

后端API

问题17:后端API调用失败,如何排查?

  • AccessCode验证失败

  • Token验证失败

  • 签名错误

  • 请求超时

通用问题

密钥与安全

问题18:setAuthSDKInfo的密钥如何获取?

获取步骤:

  1. 登录号码认证产品控制台

  2. 在左侧导航栏选择号码认证服务 > 号码认证方案管理

  3. 单击对应的方案操作列密钥

  4. 在出现的弹框上单击复制密钥

重要提示:

  • 此密钥是号码认证方案的应用密钥,不是阿里云账户的AccessKey、AccessSecret

  • 建议将该密钥在App服务端维护,可以减少因客户端存在的安全隐患而导致的密钥泄露风险

问题19:SDK使用过程的安全性如何保障?

调用过程是基于运营商及阿里云的电信级运维安全保障。

安全流程:

  1. 获取AccessCode(移动端)

    • 通过移动数据网络发起请求,获取AccessCode

    • AccessCode的有效次数为一次,使用后立即失效

    • AccessCode有效时长:

      • 中国移动:2分钟

      • 中国联通:60分钟

      • 中国电信:10分钟

  2. 验证AccessCode(服务端)

    • 通过AccessCode和手机号请求认证结果

    • 基于阿里云访问密钥对服务端请求进行鉴权

网络环境

问题20:支持哪些网络环境?

推荐环境:

  • 4G网络

  • 4G+Wi-Fi混合网络

  • 5G网络(需注意运营商特殊配置)

不推荐环境:

  • 2G网络:接口请求失败或超时概率较高

  • 3G网络:接口请求失败或超时概率较高

运营商支持情况:

  • 中国移动:4G、5G

  • 中国联通:4G、5G(5G需配置域名enrichgw.10010.com

  • 中国电信:4G、5G

性能与稳定性

问题21:如何提高SDK的稳定性和成功率?

最佳实践:

  1. 网络环境

    • 确保在4G5G网络环境下使用

    • 避免在2G/3G网络下使用

    • 避免在网络切换过程中使用

  2. 设备状态

    • 确保SIM卡已激活且未欠费

    • 确保移动数据已开启

    • 关闭VPN代理

    • 避免在模拟器或root设备上使用(生产环境)

  3. 配置优化

    • 设置合理的超时时间(建议3000 ms~5000 ms)

    • 正确配置网络权限

    • 正确配置networkSecurityConfig(Android)

    • 确保BundleID与云控制台配置一致

  4. 错误处理

    • 实现完善的错误处理逻辑

    • 对失败情况进行重试(注意AccessCode有效期)

    • 提供降级方案(如短信验证码)