开发者社区 问答 正文

移动推送Android SDK:SDK报出"deviceId is empty"错误,应该如何做?



1.问题


集成推送SDK后出现如下文所示的appKey or deviceId为空的错误,这是怎么回事?

  1. [backcolor=transparent] com[backcolor=transparent].[backcolor=transparent]alibaba[backcolor=transparent].[backcolor=transparent]sdk[backcolor=transparent].[backcolor=transparent]android[backcolor=transparent].[backcolor=transparent]push[backcolor=transparent].[backcolor=transparent]impl[backcolor=transparent].[backcolor=transparent]IllegalKeyException[backcolor=transparent]:[backcolor=transparent]
  2. [backcolor=transparent] [backcolor=transparent]AppKey[backcolor=transparent] [backcolor=transparent]or[backcolor=transparent] deviceId [backcolor=transparent]is[backcolor=transparent] empty[backcolor=transparent]!
  3. [backcolor=transparent] at com[backcolor=transparent].[backcolor=transparent]alibaba[backcolor=transparent].[backcolor=transparent]sdk[backcolor=transparent].[backcolor=transparent]android[backcolor=transparent].[backcolor=transparent]push[backcolor=transparent].[backcolor=transparent]impl[backcolor=transparent].[backcolor=transparent]a[backcolor=transparent].[backcolor=transparent]c[backcolor=transparent]([backcolor=transparent]Unknown[backcolor=transparent] [backcolor=transparent]Source[backcolor=transparent])
  4. [backcolor=transparent] at com[backcolor=transparent].[backcolor=transparent]alibaba[backcolor=transparent].[backcolor=transparent]sdk[backcolor=transparent].[backcolor=transparent]android[backcolor=transparent].[backcolor=transparent]push[backcolor=transparent].[backcolor=transparent]impl[backcolor=transparent].[backcolor=transparent]a[backcolor=transparent].[backcolor=transparent]a[backcolor=transparent]([backcolor=transparent]Unknown[backcolor=transparent] [backcolor=transparent]Source[backcolor=transparent])
  5. [backcolor=transparent] at com[backcolor=transparent].[backcolor=transparent]alibaba[backcolor=transparent].[backcolor=transparent]sdk[backcolor=transparent].[backcolor=transparent]android[backcolor=transparent].[backcolor=transparent]push[backcolor=transparent].[backcolor=transparent]impl[backcolor=transparent].[backcolor=transparent]c[backcolor=transparent].[backcolor=transparent]onAppStart[backcolor=transparent]([backcolor=transparent]Unknown[backcolor=transparent] [backcolor=transparent]Source[backcolor=transparent])


2.解决方案


请按照如下步骤进行排查:
  1. 检查appKey是否有按文档指导方式正确集成;
  2. 确认SDK是否有正确初始化,若初始化失败deviceId是获取不到的;
  3. Android推送SDK部分参数是存储在DefaultSharedPreferences中的,其中包括deviceId,请检查项目中是否有对DefaultSharedPreferences做清空操作。

展开
收起
猫饭先生 2017-10-23 14:13:27 3354 分享 版权
阿里云 AI 助理回答

遇到这个问题,意味着您的应用程序在尝试使用阿里云推送服务时,没有正确地提供appKey或者设备的deviceId。根据您提供的错误信息和解决方案指导,这里是一些具体的排查步骤:

  1. 检查appKey是否正确集成:

    • 确认您从阿里云控制台获取的AppKey是否已经准确无误地添加到了您的应用配置中。通常,这需要在您的AndroidManifest.xml文件中通过标签指定,例如:
      <meta-data
       android:name="com.alibaba.sdk.android.push.appkey"
       android:value="您的AppKey"/>
      
    • 请确保这个值与阿里云推送服务上注册的应用程序的AppKey完全一致。
  2. 确认SDK初始化情况:

    • 阿里云推送SDK需要在应用启动时进行初始化。确保调用了PushClient.startWork(Context context, String appKey, String pushCallback)方法,并且传入了正确的参数。这里的appKey就是您从阿里云获取的那个唯一标识。
    • 如果初始化失败,可能是因为网络问题、权限问题(如缺少必要的权限声明)或其他异常导致的,需要根据具体情况进一步排查。
  3. 检查SharedPreferences操作:

    • 您提到的DefaultSharedPreferences是Android用来存储应用偏好设置的一种方式。如果您的应用代码中有对默认的SharedPreferences进行清空或修改的操作,可能会意外删除了由阿里云推送SDK存储的deviceId等重要信息。
    • 确保任何对SharedPreferences的操作不会影响到阿里云推送所需的键值对。如果有必要进行清理,可以考虑只清除特定的键而不是全部数据,或者在执行清理前备份这些关键信息。
  4. 日志分析:

    • 开启阿里云推送SDK的日志输出,可以帮助您更详细地了解初始化过程中的问题所在。可以通过设置PushConfig.setDebugMode(true)来开启调试模式,这样可以在Logcat中查看详细的日志信息,有助于定位问题。
  5. 权限检查:

    • 确保您的应用已经申请并获得了所有必要的权限,包括网络访问权限、读取设备信息权限等。这些权限对于推送服务的正常工作至关重要。

按照上述步骤逐一排查,应该能帮助您解决“appKey or deviceId为空”的问题。如果问题依旧存在,建议查阅阿里云官方文档或联系阿里云技术支持获取更专业的帮助。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答