跳转到主要内容
PRODUCT DOCUMENTS

快速找到所需文档,高效完成接入与排障

浏览产品文档与友盟 Skill,展开目录并阅读正文。

分享安卓端接入指南

本文档适用于Android组件化分享SDK6.9.0及以上版本。

获取appkey

集成友盟+ U-Share SDK之前,您首先需要到 【友盟+】官网注册并且添加新应用,获得Appkey。如果已经注册过应用这步可以忽略

集成视频

开发者可关注友盟学院出品《U-Share Android端集成指南》教程,手把手教您快速集成

集成U-Share SDK

自动集成(gradle在线依赖)

分享SDK需要配合9.x.x版本基础组件库(含统计功能)才能正常使用。

从基础组件库 1.5.4版本/分享SDK 6.9.4版本开始,Android SDK gradle在线依赖库启用新坐标。下面以集成基础组件库 v9.5.1 + 分享SDK 7.2.0版本为例,说明如何在Android Studio工程build.gradle配置脚本中添加gradle线上依赖。

集成9.x.x基础组件库

在工程build.gradle配置脚本中buildscript和allprojects段中添加【友盟+】SDK maven仓库地址。

mavenCentral()

在线集成新浪微博和抖音需要增加新浪微博和抖音官方的maven仓库地址,

maven { url "https://dl.bintray.com/thelasterstar/maven/" } //微博
maven { url 'https://artifact.bytedance.com/repository/AwemeOpenSDK' } //抖音

在工程App对应build.gradle配置脚本dependencies段中添加基础组件库和分享核心库依赖:

implementation 'com.umeng.umsdk:common:+'// (必选)版本号
implementation 'com.umeng.umsdk:asms:+'// asms包依赖(必选)
implementation 'com.umeng.umsdk:link:+'//集成U-Link,可选,如要统计分享回流次数和分享新增用户指标则必选

更多方式可以参考移动统计SDK集成文档中集成流程 部分,将基础组件库和对应必选插件集成到应用中。

集成U-Share SDK

集成完基础组件库后,就可集成U-Share SDK了。

分享SDK gradle 在线依赖目前支持QQ、微信、新浪微博、支付宝、钉钉5个国内主流三方分享平台,其它平台还是需要从【友盟+】官网下载SDK进行离线集成。

重要

QQ、微信和微博平台在分享7.1.4SDK及以上版本,除了集成友盟官方依赖库,还需要额外集成QQ、微信和微博的官方SDK依赖库。分享v7.3.4 SDK中的QQ SDK版本是v3.5.16.4,暂时只支持离线引入jar包和官方依赖库,并且需要调用授权api才可以正常使用授权和分享功能//QQ官方sdk授权 Tencent.setIsPermissionGranted(true);

//友盟分享核心组件
implementation 'com.umeng.umsdk:share-core:+'
//友盟分享依赖v4包
implementation 'com.android.support:support-v4:25.0.0'

//微信
implementation 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.24'
implementation 'com.umeng.umsdk:share-wx:+'

//QQ
implementation files('libs/open_sdk_3.5.16.4_r8c01346_lite.jar')
implementation 'com.umeng.umsdk:share-qq:+'

//新浪微博
implementation('io.github.sinaweibosdk:core:13.10.1') {
  exclude module: 'unspecified'
}
implementation 'com.umeng.umsdk:share-sina:+'

//钉钉
implementation 'com.alibaba.android:ddsharesdk:1.2.2'
implementation 'com.umeng.umsdk:share-dingding:+'

//抖音
implementation 'com.bytedance.ies.ugc.aweme:opensdk-china-external:0.1.9.0'
implementation 'com.bytedance.ies.ugc.aweme:opensdk-common:0.1.9.0'
implementation files('libs/umeng-share-bytedance-7.3.4.jar')

//荣耀账号授权
implementation files('libs/Honor-openSDK-6.0.3.004.aar')
implementation files('libs/umeng-share-honor-7.3.4.jar')

//支付宝
implementation 'com.umeng.umsdk:share-alipay:+'

我们提供了gradle在线依赖方式的三合一Demo,开发者可以参考:https://github.com/umeng/MultiFunctionAndroidMavenDemo-master

自动集成完成后可以直接跳到添加回调Activity一节

手动集成

以下是手动集成基础组件库和U-Share SDK的流程

获取SDK

在附件中找到分享android SDK,此SDK包含了微信、QQ、微博、钉钉和企业微信5个平台。

解压后如下图所示:

mage.png

导入jar和res

将main文件夹以及platform(选择你想使用的平台即可)文件下,对应的资源文件和jar放入你的工程

添加回调Activity

微信在包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。QQ与新浪QQ与新浪不需要添加Activity,但需要在使用QQ分享或者授权的Activity中,添加:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}

注意onActivityResult不可在fragment中实现,如果在fragment中调用登录或分享,需要在fragment依赖的Activity中实现

钉钉与微信相似,钉钉需要在包名目录下创建ddshare文件夹,然后建立一个DDShareActivity的类,DingCallBack

创建第三方平台应用

大部分社交平台进行分享、登录操作首先需要在第三方平台创建应用并提交审核,创建应用后,分享、登录操作时显示的应用icon、名称和对应开放平台设置有关,必须要创建应用的平台为:微信、QQ、新浪、钉钉、企业微信、支付宝、Facebook、Kakao、LinkeIn、Twitter,创建应用方法请参考文档

配置Android Manifest XML

创建完第三方平台应用后,还需要进行一些配置。以下是部分社交平台需要进行的配置

微信

需要在工程AndroidManifest.xml清单文件中增加:

<activity
    android:name=".wxapi.WXEntryActivity"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:exported="true"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

微信分享模块还需要在工程AndroidManifest.xml清单文件中增加provider标签配置

注意:对应authorities属性值请结合您自己包名自行定义,不要直接使用Umeng Demo工程中属性值com.tencent.sample2.fileprovider。

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/filepaths "/>
</provider>
重要

provider对应authorities属性值不可以自定义,必须是android:authorities=”${applicationId}.fileprovider”

微信分享模块集成时除了要配置工程AndroidManifest.xml清单文件之外,还需要在res/xml目录(如果没有xml目录,则新建一个)下,添加文件filepaths.xml,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <root-path name="opensdk_root" path=""/>
    <external-files-path name="umeng_cache" path="umeng_cache/"/>
</paths>

重要

从Android 11开始,必须要在AndroidManifest.xml清单文件中加入query权限申请,才能检测到手机上安装的三方应用包安装状态,否则会出现“错误码2008:没有安装应用”、“请先安装微信/QQ/微博/企业微信/钉钉/支付宝客户端”等现象。

需要在主工程的AndroidManifest.xml 中增加标签,代码如下:

<manifest package="com.example.app">

      ...

      // 在应用的AndroidManifest.xml添加如下<queries>标签
    <queries>
        <package android:name="com.tencent.mm" />            // 指定微信包名
        <package android:name="com.tencent.mobileqq" />    //指定qq包名
        <package android:name="com.sina.weibo" />             //指定微博包名
        <package android:name="com.tencent.wework" />      //指定企业微信包名
        <package android:name="com.qzone" />                   //指定QQ空间包名
        <package android:name="com.alibaba.android.rimet" /> // 指定钉钉包名
        <package android:name="com.eg.android.AlipayGphone" /> // 指定支付宝包名
        <package android:name="com.instagram.android" />         // 指定instagram包名
        <package android:name="com.ss.android.ugc.aweme" />  // 指定抖音包名
    </queries>

      ...

</manifest>

QQ

分享v7.2.0 SDK中的QQ SDK版本是v3.5.12,需要调用授权api才可以正常使用授权和分享功能

//QQ官方sdk授权
Tencent.setIsPermissionGranted(true);

需要在工程AndroidManifest.xml清单文件中增加以下参数:

请注意将我们的qq appkey替换成您自己的qq appkey。对应authorities属性值请结合您自己包名自行定义,不要直接使用Umeng Demo工程中属性值com.tencent.sample2.fileprovider。

<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="tencent100424468" />
    </intent-filter>
</activity>

<activity
    android:name="com.tencent.connect.common.AssistActivity"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/filepaths" />
</provider>

分享v7.2.0SDK依赖QQ官方SDKv3.5.12,集成时除了要配置工程AndroidManifest.xml清单文件之外,还需要同时需要在工程res目录下新建filepaths.xml配置。

<!-- QQ 官方分享SDK 共享路径 -->
<root-path name="opensdk_root" path=""/>
<external-files-path name="opensdk_external" path="Images/tmp"/>

QQ官方SDK v3.3.8.lite及以上依赖特定android v4 support包,请将工程中依赖的android-support-v4.jar版本升级到23以上。例如:将其升级到 android-support-v4 23.4.0。

重要

同时集成微信,QQ,新浪微博、钉钉等平台只需配置一组provider,不要重复配置,但是微信、QQ和新浪微博每个平台都需要进行配置filepaths文件

新浪微博

分享7.1.4及以后 SDK后新浪微博SDK不需要在AndroidManifest.xml清单文件中增加activity。provider配置方式请看微信集成部分,

需要在filepath中添加新浪微博官方SDK12.5.0共享路径,< external-files-path name=”share_files” path=”.” / >

升级图

新浪微博SDK升级到分享7.1.4版本及以上,项目compileSdkVersion的版本必须在29以上

新浪微博SDK在多图分享时图片资源仅支持共享路径 /data/data/应用包名/files/ 下图片文件

钉钉

分享v7.1.5 SDK开始适配钉钉官方ddsharesdk:1.2.0版本,并且适配Android11系统图片分享至钉钉App

需要在工程AndroidManifest.xml清单文件中增加以下内容:

<activity
    android:name=".ddshare.DDShareActivity"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:exported="true"
    android:launchMode="singleInstance"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

清单文件也增加provider标签配置

重要

请将authorities更换为自己的项目app包名.fileprovider

钉钉1

清单文件中provider调用的filepath文件中添加配置<root-path name="opensdk_root" path=""/>

钉钉2

抖音

分享v7.2.1 SDK开始支持抖音平台的分享和登录功能,抖音平台SDK版本是v1.9.0,

需要在工程AndroidManifest.xml清单文件中增加:

 <activity
    android:name=".douyinapi.DouYinEntryActivity"
    android:exported="true"></activity>

还需要在res/xml目录(如果没有xml目录,则新建一个)下,添加文件filepaths.xml,内容如下:

<!-- 抖音适配android11本地图片分享配置路径 -->
<external-files-path name="imagedata" path="imageData/"/>
<external-files-path name="videodata" path="videoData/"/>
<external-files-path name="newmedia" path="newMedia/"/>

企业微信

企业微信分享模块支持FileProvider方式进行消息分享,兼容Android 11图片分享。具体示例代码见友盟官方Demo。友盟分享提供API接口PlatformConfig.setWXWork用于设置开发者App在企业微信后台得到对应信息。开发者需在宿主工程AndroidManifest.xml清单文件中增加”android.support.v4.content.FileProvider”配置。注意对应authorities属性值请结合您自己包名自行定义,不要直接使用Umeng Demo工程中属性值com.tencent.sample2.fileprovider。

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/filepaths" />
</provider>

企业微信集成时除了要配置工程AndroidManifest.xml清单文件之外,还需要在res/xml目录(如果没有xml目录,则新建一个)下,添加文件filepaths.xml,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <!-- 友盟微信分享SDK 共享路径-->
    <external-files-path name="umeng_cache" path="umeng_cache/"/>
</paths>

初始化设置

初始化需要在您的Application中调用我们的初始化接口,这里的appkey请替换成后台应用的appkey:

@Override
public void onCreate(){
  super.onCreate();
  UMConfigure.init(this, "5a12384aa40fa3551f0001d1", "umeng", UMConfigure.DEVICE_TYPE_PHONE, ""); 
}

更多了解初始化接口可以参照统计SDK文档初始化及通用接口部分内容,init接口调用时机请参考合规指南

接下来需要在Application中设置各个平台的appkey:

重要

设置微信、微博、QQ等平台时,请将友盟Demo包名com.tencent.sample2 更换成您自己的项目包名

// 微信设置
PlatformConfig.setWeixin("wxdc1e388c3822c80b","3baf1193c85774b3fd9d18447d76cab0");
PlatformConfig.setWXFileProvider("com.tencent.sample2.fileprovider");
// QQ设置
PlatformConfig.setQQZone("101830139","5d63ae8858f1caab67715ccd6c18d7a5");
PlatformConfig.setQQFileProvider("com.tencent.sample2.fileprovider");
// 新浪微博设置
PlatformConfig.setSinaWeibo("3921700954","04b48b094faeb16683c32669824ebdad","http://sns.whalecloud.com");
PlatformConfig.setSinaFileProvider("com.tencent.sample2.fileprovider");
//钉钉设置
PlatformConfig.setDing("dingoalmlnohc0wggfedpk");
PlatformConfig.setDingFileProvider("com.tencent.sample2.fileprovider");
//抖音设置
PlatformConfig.setBytedance("awd1cemo6d0l69zp","awd1cemo6d0l69zp","a2dce41fff214270dd4a7f60ac885491",FileProvider);
// 企业微信设置
PlatformConfig.setWXWork("wwac6ffb259ff6f66a","EU1LRsWC5uWn6KUuYOiWUpkoH45eOA0yH-ngL8579zs","1000002","wwauthac6ffb259ff6f66a000002");
PlatformConfig.setWXWorkFileProvider("com.tencent.sample2.fileprovider");
//荣耀设置
PlatformConfig.setHonor("appid", "app_secret");
重要

Android 11必须要调用PlatformConfig.setWXFileProvider、PlatformConfig.setQQFileProvider和PlatformConfig.setDingFileProvider等等,否则分享本地图片到微信、QQ、微博和钉钉等平台会失败

重要

新浪微博必须统一设置为PlatformConfig.setSinaFileProvider(应用包名.fileprovider);

企业微信的参数需要开发者登录企业微信管理后台 https://work.weixin.qq.com/ 进行查看。填写的四个参数分别为:参数1:id (我的企业 企业ID),参数2:Secret (应用管理->你的应用名 Secret),参数3:AgentId(应用管理->你的应用名 AgentId),参数4:schema (应用管理->企业微信授权登录->Android schema)

签名配置

签名的概念将文件夹中的签名文件放入到工程中,例如我的签名文件是debug.keystore,然后增加签名文件的密码:

signingConfigs {
    debug {
        storeFile file('debug.keystore')
        storePassword "android"
        keyAlias "androiddebugkey"
        keyPassword "android"
    }
}

然后在buildTypes中将这个signingConfigs配置进去,签名文件如果不加,部分平台的授权会受到影响。

混淆设置

-dontshrink
-dontoptimize
-dontwarn com.google.android.maps.**
-dontwarn com.squareup.okhttp.**
-dontwarn android.webkit.WebView
-dontwarn com.umeng.**
-dontwarn com.tencent.weibo.sdk.**
-dontwarn com.facebook.**
-keep public class javax.**
-keep public class android.webkit.**
-dontwarn android.support.v4.**
-keep enum com.facebook.**
-keepattributes Exceptions,InnerClasses,Signature
-keepattributes *Annotation*
-keepattributes SourceFile,LineNumberTable
-keepattributes EnclosingMethod
-keep public interface com.facebook.**
-keep public interface com.tencent.**
-keep public interface com.umeng.socialize.**
-keep public interface com.umeng.socialize.sensor.**
-keep public interface com.umeng.scrshot.**

-keep public class com.umeng.socialize.* {*;}

-keep class com.umeng.commonsdk.statistics.common.MLog {*;}
-keep class com.umeng.commonsdk.UMConfigure {*;}
-keep class com.umeng.** {*;}
-keep class com.umeng.**
-keep class com.facebook.**
-keep class com.facebook.** { *; }
-keep class com.umeng.scrshot.**
-keep public class com.tencent.** {*;}
-keep class com.umeng.socialize.sensor.**
-keep class com.umeng.socialize.handler.**
-keep class com.umeng.socialize.handler.*
-keep class com.umeng.weixin.handler.**
-keep class com.umeng.weixin.handler.*
-keep class com.umeng.qq.handler.**
-keep class com.umeng.qq.handler.*
-keep class UMMoreHandler{*;}
-keep class com.tencent.mm.sdk.modelmsg.WXMediaMessage {*;}
-keep class com.tencent.mm.sdk.modelmsg.** implements com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {*;}
-keep class com.tencent.mm.sdk.** {
   *;
}
-keep class com.tencent.mm.opensdk.** {
   *;
}
-keep class com.tencent.wxop.** {
   *;
}
-keep class com.tencent.mm.sdk.** {
   *;
}
-dontwarn twitter4j.**
-keep class twitter4j.** { *; }

-keep class com.tencent.** {*;}
-dontwarn com.tencent.**
-keep class com.kakao.** {*;}
-dontwarn com.kakao.**
-keep public class com.umeng.com.umeng.soexample.R$*{
    public static final int *;
}
-keep public class com.linkedin.android.mobilesdk.R$*{
    public static final int *;
}
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class com.tencent.open.TDialog$*
-keep class com.tencent.open.TDialog$* {*;}
-keep class com.tencent.open.PKDialog
-keep class com.tencent.open.PKDialog {*;}
-keep class com.tencent.open.PKDialog$*
-keep class com.tencent.open.PKDialog$* {*;}
-keep class com.umeng.socialize.impl.ImageImpl {*;}
-keep class com.sina.** {*;}
-dontwarn com.sina.**
-keep class  com.alipay.share.sdk.** {
   *;
}

-keepnames class * implements android.os.Parcelable {
    public static final ** CREATOR;
}

-keep class com.linkedin.** { *; }
-keep class com.android.dingtalk.share.ddsharemodule.** { *; }
-keepattributes Signature

重要

如果想使用支付功能,请参考此微信支付说明

如果分享或者授权登录没有回调,请参考没有回调