目录
一、移动统计SDK
二、消息推送U-push
1、修改应用包名问题
2、第三方依赖冲突导致出错
三、第三方平台分享
1、手动集成
2、自动集成
3、集成过程中问题
3.1 配置Android Manifest XML
3.2. qqappid缺失报错:
3.3 QQ授权代码
3.4 微博分享 [compileSdkVersion = 29]
最近不少第三方SDK提供方也根据市场监管的规则进行了对应的调整。Umeng是一个老牌的第三方SDK的集成开发平台,它的SDK也做了相当多的升级和更新。笔者的Android APP接入的Umeng sdk是之前比较老的旧版本了,现在监管新规出来了,还是需要重视下,免得违规导致下架,现在将接入最新版的Umeng sdk的过程和相关问题记录下。
Umeng App监管执法合规自查通知
一、移动统计SDK
sdk集成流程参考文档:https://developer.umeng.com/docs/119267/detail/118584
照着上面的文档来做,过程很简单,集成过程中没遇到什么问题,建议采用自动集成方式导入相关的引用包:
implementation 'com.umeng.umsdk:common:9.5.2'// 必选
implementation 'com.umeng.umsdk:asms:1.6.3'// 必选
implementation 'com.umeng.umsdk:apm:1.7.0' //错误分析模块改为独立库,看crash和性能数据请一定集成
implementation 'com.umeng.umsdk:abtest:1.0.0'//使用U-App中ABTest能力,可选
二、消息推送U-push
SDK v6.5.5 自动集成文档:https://developer.umeng.com/docs/67966/detail/206987
引用包:
implementation 'com.umeng.umsdk:push:6.5.5'
1、修改应用包名问题
这里要注意的是,如果你开发过程中,修改了应用的包名,一定要记得将修改后的包名和Umeng的推送后台管理设置[见下图]的包名保持一致,否则推送消息给客户端会抛出错误。
2、第三方依赖冲突导致出错
当您向应用项目添加多个依赖项时,这些「直接依赖」和「间接/传递依赖项」直接可能会相互冲突,在出现类似情况时,build项目的时候就会报错
三、第三方平台分享
社会化分享集成文档:https://developer.umeng.com/docs/128606/detail/193879
笔者集成了几个主流平台,包括微信、QQ、微博的分享,集成方式也包括自动集成和手动集成,如果你网速比较好,建议还是采用「自动集成」方式比较便捷。这部分集成的第三方平台的SDK是最多的,所以集成过程中的遇到问题也最多。
1、手动集成
例如下面是「share_android_7.2.1 sdk」的内容,手动集成的方式比较繁琐,虽然Umeng已经按不同平台将各个平台的lib包分类了,但需要手动将各个jar包拷贝到app的libs目录下,并且还有很多res图片资源和layout文件都需要自己逐一拷贝到项目的对应的目录下。
笔者最开始是采用手动集成方式,但是过程中并不顺利,总是报错或编译过程中缺少文件类,所以就放弃了。虽然拷贝的一些资源文件和自动集成jar的资源文件有重叠,但是编译打包运行也没有问题。
2、自动集成
implementation 'com.umeng.umsdk:share-core:7.2.1'//分享核心库,必选
implementation 'com.umeng.umsdk:share-board:7.2.1'//分享面板功能,可选
implementation 'com.umeng.umsdk:share-wx:7.2.1'//微信完整版
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:6.8.0'//微信官方依赖库,必选
implementation 'com.umeng.umsdk:share-qq:7.2.1'//QQ完整版
implementation files('libs/open_sdk_3.5.12.2_r97423a8_lite.jar') //QQ官方依赖库,必选
implementation 'com.umeng.umsdk:share-sina:7.2.1'//新浪微博完整版
implementation 'io.github.sinaweibosdk:core:12.5.0@aar'//新浪微博官方SDK依赖库,必选
这里要注意:QQ的官方依赖包,必须自己手动下载,然后拷贝到app的libs目录下,笔者去QQ开放平台下载的包:[open_sdk_3.5.13.83_rc564928_lite.jar],比上面Umeng官网集成文档里的版本:[open_sdk_3.5.12.2_r97423a8_lite.jar] 要新一些,QQ开放平台没有提供历史版本下载。
open_sdk_3.5.13.83_rc564928_lite.jar下地址: https://wiki.connect.qq.com/sdk%e4%b8%8b%e8%bd%bd
3、集成过程中问题
3.1 配置Android Manifest XML
这里官方文档的描述容易引起歧义,笔者在这里也踩了不少坑,所以也记录下。
下面是集成文档的部分内容截图,笔者集成的是7.2.1版,看这个官方文档的描述,那我是应该添加还是不添加WXEntryActity呢?
答案是不添加,因为在引入的 com.umeng.umsdk:share-wx:7.2.1@aar里已经包括一个AndroidManifest.xml文件,见下图,里面已经声明了这个Activity. 所以之前的老版本是需要申明的,现在就不需要了。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.umeng.socialize.weixin"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="12"
android:targetSdkVersion="22" />
<application>
<activity
android:name="${applicationId}.wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
</application>
</manifest>
所以总结下来,之前在老版本里,需要在AndroidManifest.xml里面申明的Activity都基本取消了。下面的代码段是老版本里申明的,目前都注释掉了。如果不放心,可以参考上面笔者举的例子,将引入的第三方包展开,看下里面的AndroidManifest.xml是否已经有了相关申明。
下面是之前旧版本SDK要求在AndroidManifest.xml里面申明的Activity,目前都可以注释掉了:
<!-- weixin -->
<!--
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
-->
<!-- QQ -->
<!-- 在QQ开放平台申请应用分配的APP ID:101835469 -->
<!--
<activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="tencent101835469"/>
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"/>
-->
<!-- sina -->
<!--
<activity
android:name="com.umeng.socialize.media.WBShareCallBackActivity"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:theme="@android:style/Theme.Translucent.NoTitleBar"></activity>
<activity
android:name="com.sina.weibo.sdk.share.WBShareCallBackActivity"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:theme="@android:style/Theme.Translucent.NoTitleBar"></activity>
<activity
android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:windowSoftInputMode="adjustResize"></activity>
<activity
android:name="com.sina.weibo.sdk.share.WbShareTransActivity"
android:launchMode="singleTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
-->
3.2. qqappid缺失报错:
Attribute data@scheme at AndroidManifest.xml requires a placeholder substitution but no value for <qqappid> is provided.
报错原因是因为:com.umeng.umsdk:share-qq:7.2.1的AndroidManifest文件里含有文本:
<data android:scheme="tencent${qqappid}" />
如下图:
解决方案:在app的build.gradle里添加在QQ开发平台申请的app key:
android {
defaultConfig {
manifestPlaceholders = [qqappid: "12345678"]
}
}
3.3 QQ授权代码
//QQ官方sdk授权
//目前采用的是v7.2.1的版本,经测试,不加上授权代码,点击分分享会提示错误toast:
//分享失败错误码: 2003 错误信息:分享失败----用户未授权,暂时无法使用QQ登录及分享等功能
//分享v7.2.0 SDK中的QQ SDK版本是v3.5.12,暂时只支持离线引入jar包和官方依赖库,并且需要调用授权api才可以正常使用授权和分享功能
Tencent.setIsPermissionGranted(true);
3.4 微博分享 [compileSdkVersion = 29]
分享的文档里提到:新浪微博SDK升级到分享7.1.4版本及以上,项目compileSdkVersion的版本必须在29以上,笔者的compileSdkVersion为26,在build过程中会报错,改成29就正常了:
AAPT: error: attribute android:requestLegacyExternalStorage not found.