Android umeng推送无法获取DeviceToken

前言

App集成三方推送是很常见的快速开发方案,push大多使用umeng或者jpush 二选一,继承工程中即使按照官方文档还是会有这样那样的问题。
这篇blog,主要是记录自己项目中继承umeng问题并分享经验

问题?

继承最新umeng push,出现deviceToken 无法获取 code=-11.

这里写图片描述

自检方式1

首先,根据提示进入官方文档,检查三个步骤

1.UMENG_APPKEY,UMENG_MESSAGE_SECRET ,是否匹配
2.解压apk文件查看的so文件是否包含,如果是 com.umeng.message_v3.0.5.jar.
3.可以下载全平台so文件导入推送module。

以上三点,前两点不容易出问题,都是copy过来的,第三点需要着重检查生成apk后x86,armeabi,xxxx.几个文件夹是否包含相同的so文件。

这里写图片描述

如图,通过studio可以直接查看的apk包lib文件下so库中包含是否相同。(这里用的推送不是最新版本的push 4.2).

遇到问题:

1.引入新版本push无法获取 device_token
用最简单的对比法,和umeng 官方提供的demo进行对比看哪里不一样。

1.注意检查点
这里写图片描述

上图清单文件中有两处需要更改为自己的包名

<provider
            android:name="com.umeng.message.provider.MessageProvider"
            android:authorities="自己包名.umeng.message"
            android:exported="false">
            <grant-uri-permission android:pathPattern=".*" />
 <receiver
            android:name="com.taobao.agoo.AgooCommondReceiver"
            android:exported="true">
            <intent-filter>
                <action android:name="自己包名.intent.action.COMMAND" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.PACKAGE_REMOVED" />
                <data android:scheme="package" />
            </intent-filter>
        </receiver>
【非必须】

当然,如果用 ${applicationId} 这种方式进行去app包名,记得在Application中初始化umeng 推送的时候进行重新赋值,以免获取不到主module包名

   // 首先重新设置包名
        mPushAgent.setResourcePackageName(R.class.getPackage().getName());
自检方式2

如果demo可以拿到DeviceToken(demo应该是可以拿到),自己app无法拿到。

1.将demo的包名替换为自己app包名,将demo UMENG_APPKEY,UMENG_MESSAGE_SECRET,替换自己a
pp的key,和message_secret,是否能拿到device_token.
2.排除公司将umeng外链禁用问题,为什么这么说?umeng走阿里云,有些域名带taobao字样。

:  enableService,comptName=ComponentInfo{cn.ftoutiao.account.android/com.taobao.accs.ChannelService}

有可能被禁用。

3.方式三上面检查过了,还是无法获取,deviceToken,需要查看umeng push版本号是否有冲突。版本之间是否有不兼容问题。看系统log,是否有相关log。()

说了以上这些检查点,基本上可以覆盖一些错误的配置问题。

我自己app,找问题找了两个版本。最后用老版本的推送。可以获取devicetoken。

问题是so导致:

添加了配置在 build.gradle

 ndk {
            abiFilter "armeabi"
            abiFilter "x86"
        }

3.0.5 version 只包含这两个so文件夹。

注意。建议清单文件中写上去,即使你用代码方式进行了注册

  <meta-data
            android:name="UMENG_APPKEY"
            android:value="xxxx" />

        <meta-data
            android:name="UMENG_MESSAGE_SECRET"
            android:value="xxx" />

代码方式注册 umeng push

        UMConfigure.init(this, BuildConfig.UMENT_KEY, market, UMConfigure.DEVICE_TYPE_PHONE, BuildConfig.UMENT_MSG);

### BuildConfig.UMENT_KEY,BuildConfig.UMENT_MSG 在
build.gradle中进行了声明,所以这里可以这样调用
debug {
            buildConfigField "boolean", "MAIN_DEBUG", "true" // 调试总开关
            buildConfigField "String", "UMENT_KEY", "\"5a9134c28f4a9d236100029a\""
            buildConfigField "String", "UMENT_MSG", "\"6e65abef92663cadaa526638239fe52b\""
            minifyEnabled false     //混淆
            zipAlignEnabled false   //zipalign压缩对齐
            shrinkResources false   //移除无用的资源
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.releaseConfig //debug签名配置
        }

有问题可以发私信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灯塔@kuaidao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值