市场监管新规下Android接入的友盟Umeng移动统计/推送/分享SDK过程问题总结

   目录

一、移动统计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项目的时候就会报错,可以参考笔者另外一篇文章:Android第三方依赖冲突解决方案 - 以集成友盟推送(U-Push SDK)与阿里云移动用户反馈(Mobile Feedback SDK)为例_思涛的博客的博客-CSDN博客

三、第三方平台分享

社会化分享集成文档:https://developer.umeng.com/docs/128606/detail/193879

    笔者集成了几个主流平台,包括微信、QQ、微博的分享,集成方式也包括自动集成和手动集成,如果你网速比较好另外还能自由翻墙,建议还是采用「自动集成」方式比较便捷。这部分集成的第三方平台的SDK是最多的,所以集成过程中的遇到问题也最多。

1、手动集成

    例如下面是「share_android_7.2.1 sdk」的内容,手动集成的方式比较繁琐,虽然Umeng已经按不同平台将各个平台的lib包分类了,但需要手动将各个jar包拷贝到app的libs目录下,并且还有很多res图片资源和layout文件都需要自己逐一拷贝到项目的对应的目录下。

share_android_7.2.1

    笔者最开始是采用手动集成方式,但是过程中并不顺利,总是报错或编译过程中缺少文件类,所以就放弃了。虽然拷贝的一些资源文件和自动集成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.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

思涛的博客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值