uni-app 报Bug 未初始化sdk前 DCloud开发通用工具库 数字天堂SDK获取了SIM卡提供商的国家代码

uni-app 报Bug 未初始化sdk前 DCloud开发通用工具库 数字天堂SDK获取了SIM卡提供商的国家代码

项目 信息
产品分类 uni小程序SDK
手机系统 Android
手机系统版本号 Android 13
手机厂商 小米
手机机型 小米13
页面类型 vue
SDK版本号 3.96

操作步骤:

  • 正常启动

预期结果:

  • 在点击隐私政策前,不获取设备信息

实际结果:

  • 在点击隐私政策前,获取了设备信息

bug描述:

根据上架小米提供的隐私合规检测报告显示看,在未初始化sdk前,DCloud 开发通用工具库,数字天堂SDK获取了获取SIM卡提供商的国家代码
包名为:io.dcloud.common,io.dcloud.feature,io.dcloud.application,io.src.dcloud
相应堆栈为:
android.telephony.TelephonyManager.getPhoneType(TelephonyManager.java:1462)—io.dcloud.common.adapter.util.DeviceInfo.initGsmCdmaCell(Unknown Source:12)—io.dcloud.application.DCLoudApplicationImpl.init(Unknown Source:13)—io.dcloud.feature.unimp.DCUniMPService.onCreateImpl(Unknown Source:1)—io.src.dcloud.adapter.DCloudBaseService.onCreate(Unknown Source:2)—android.app.ActivityThread.handleCreateService(ActivityThread.java:3674)—android.app.ActivityThread.-wrap4(Unknown Source:0)—android.app.ActivityThread$H.handleMessage(ActivityThread.java:2009)—android.os.Handler.dispatchMessage(Handler.java:106)—android.os.Looper.loop(Looper.java:164)—android.app.ActivityThread.main(ActivityThread.java:6843)—java.lang.reflect.Method.invoke(Native Method)—com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)—com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)


更多关于uni-app 报Bug 未初始化sdk前 DCloud开发通用工具库 数字天堂SDK获取了SIM卡提供商的国家代码的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

初始化之前需要声明需要的信息。参考:
https://ask.dcloud.net.cn/article/39484

更多关于uni-app 报Bug 未初始化sdk前 DCloud开发通用工具库 数字天堂SDK获取了SIM卡提供商的国家代码的实战教程也可以访问 https://www.itying.com/category-93-b0.html


解决了吗请问

uni-app 开发过程中,如果你遇到类似“未初始化 SDK 前,DCloud 开发通用工具库数字天堂 SDK 获取了 SIM 卡提供商的国家代码”的报错,通常是因为在 SDK 未正确初始化之前,某些功能被提前调用了。

可能的原因

  1. SDK 初始化顺序问题:某些功能(如获取 SIM 卡信息)依赖于 SDK 的初始化,如果在 SDK 初始化之前调用了这些功能,就会导致报错。
  2. 异步初始化问题:如果 SDK 的初始化是异步的,而你在初始化完成之前就调用了相关功能,也会导致这个问题。
  3. 插件或模块冲突:某些插件或模块可能会在应用启动时自动调用某些功能,导致在 SDK 初始化之前就执行了相关操作。

解决方案

  1. 确保 SDK 初始化顺序

    • App.vueonLaunch 生命周期中,确保先初始化 SDK,然后再调用其他功能。
    export default {
      onLaunch() {
        // 初始化 SDK
        uni.initializeSDK().then(() => {
          // SDK 初始化完成后,再调用其他功能
          this.getSimInfo();
        });
      },
      methods: {
        getSimInfo() {
          // 获取 SIM 卡信息
          uni.getSimInfo().then(res => {
            console.log(res);
          });
        }
      }
    }
    
  2. 使用异步初始化

    • 如果 SDK 的初始化是异步的,确保在初始化完成后再调用相关功能。
    export default {
      async onLaunch() {
        await uni.initializeSDK(); // 等待 SDK 初始化完成
        this.getSimInfo();
      },
      methods: {
        getSimInfo() {
          uni.getSimInfo().then(res => {
            console.log(res);
          });
        }
      }
    }
    
  3. 检查插件或模块

    • 检查是否有插件或模块在应用启动时自动调用了某些功能。如果有,确保这些功能在 SDK 初始化之后执行。
  4. 更新 SDK 或插件

    • 确保你使用的 uni-app SDK 和相关插件是最新版本,以避免已知的 Bug。
  5. 调试和日志

    • 在开发过程中,添加调试日志,确保 SDK 初始化和其他功能的调用顺序正确。

示例代码

以下是一个简单的示例,展示如何在 App.vue 中正确初始化 SDK 并调用相关功能:

export default {
  onLaunch() {
    // 初始化 SDK
    uni.initializeSDK().then(() => {
      console.log('SDK 初始化完成');
      // SDK 初始化完成后,再调用其他功能
      this.getSimInfo();
    }).catch(err => {
      console.error('SDK 初始化失败', err);
    });
  },
  methods: {
    getSimInfo() {
      // 获取 SIM 卡信息
      uni.getSimInfo().then(res => {
        console.log('SIM 卡信息:', res);
      }).catch(err => {
        console.error('获取 SIM 卡信息失败', err);
      });
    }
  }
}
回到顶部