版权声明:本文为HaiyuKing原创文章,转载请注明出处!

前言

这里简单记录下友盟分享SDK集成的步骤。

如果想要使用自定义分享对话框实现,请参考《ShareDialogDemo【分享对话框】》,这个demo中就不集成分享对话框了,只是简单记录下和自定义对话框搭配的相关代码!

另外,因为可能用到存储权限,所以还需要搭配运行时权限申请功能。

还有就是QQ、微信、新浪等appkey值,需要在各自的平台上申请,这里就不一一介绍了。

使用步骤

一、项目组织结构图

注意事项:

1、  导入类文件后需要change包名以及重新import R文件路径

2、  Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖

二、导入步骤

1、在友盟官网上创建应用,获取Appkey

2、导入SDK

具体请阅读官网:https://developer.umeng.com/docs/66632/detail/66639

方法一:下载SDK,将解压出来的jar包和res文件复制到工程libs/目录下。

下载地址:https://developer.umeng.com/

文件夹里面的jar文件、res文件都用得到。

(1)首先,新建thirdlib这个module,用来统一管理第三方平台的SDK;并且在app的bundle.gradle文件中引入thirdlib

    //thirdlib
implementation project(':thirdlib')

(2)然后,将下载的友盟分享SDK中的jar文件复制到thirdlib这个module的libs目录下,并且在thirdlib的bundle.gradle文件中引用这些jar文件;以及res文件也要复制

还需要在app的bundle.gradle中添加以下代码

apply plugin: 'com.android.application'

android {
compileSdkVersion 28
defaultConfig {
applicationId "com.why.project.umengsharedemo"
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
//集成友盟分享sdk
repositories {
flatDir {
dirs 'libs'
dirs project(':thirdlib').file('libs')
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' //thirdlib
implementation project(':thirdlib')
}

回到thirdlib中,添加回调Activity

微信
在包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。

支付宝
与微信相似,支付宝需要在包名目录下创建apshare文件夹,然后建立一个ShareEntryActivity的类,继承ShareCallbackActivity。

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

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中实现。

(3)然后,在app的AndroidManifest.xml中添加权限、配置Appkey【注意,紫色标记的代码】

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.why.project.umengsharedemo"> <!-- ======================友盟分享========================== -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity> <!-- ======================友盟分享========================== -->
<!--value的值填写你在友盟后台申请的应用Appkey-->
<meta-data android:value="y483298439438209dewdewdew8989328" android:name="UMENG_APPKEY"/>
<!--value的值填写渠道名称,例如yingyongbao。这里设置动态渠道变量【如果配合友盟统计一起使用的话,这里换成友盟统计的写法】-->
<meta-data android:value="umengshare" android:name="UMENG_CHANNEL"/>
<!-- 新浪 -->
<activity
android:name="com.umeng.socialize.media.WBShareCallBackActivity"
android:configChanges="keyboardHidden|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="false"
>
</activity>
<activity android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:windowSoftInputMode="adjustResize"
>
</activity>
<activity
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
android:launchMode="singleTask"
android:name="com.sina.weibo.sdk.share.WbShareTransActivity">
<intent-filter>
<action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<!-- 微信 -->
<activity
android:name="com.why.project.thirdlib.wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!-- QQ 请注意将qq appkey替换成您自己的qq appkey -->
<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="tencent74743893832980203290" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"/> </application> </manifest>

因为可能用到存储权限,所以还需要搭配运行时权限申请功能。

(4)然后,在app中新建MyApplication.java文件,并添加友盟分享初始化方法

package com.why.project.umengsharedemo;

import android.app.Application;

import com.umeng.commonsdk.UMConfigure;
import com.umeng.socialize.PlatformConfig; /**
* Created by HaiyuKing
* Used
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate(); /*=================友盟分享sdk=====================*/
initUmengShare();
} //友盟分享
private void initUmengShare(){
/**
* 如果项目的Manifest文件中已经配置【友盟+】的AppKey和Channel,则使用该方法初始化,同时不必再次传入AppKey和Channel两个参数。
*/
UMConfigure.init(this, UMConfigure.DEVICE_TYPE_PHONE,""); PlatformConfig.setWeixin("wx3232432432", "ferfefre5324432fref3rwf");
PlatformConfig.setSinaWeibo("34432423dfew", "gfgreerrerererwe","http://sns.whalecloud.com");
PlatformConfig.setQQZone("3223354321", "r234r432ferfrwewe");
}
}

好了,友盟分享集成到项目中了。

三、使用方法

(1)在APP的module中的strings.xml文件中添加以下代码

<resources>
<string name="app_name">UmengShareDemo</string> <string name="share_title">分享简书app</string>
<string name="share_url">https://www.jianshu.com/</string>
<string name="share_desc">人生海海,有趣的人相聚于此</string>
<string name="share_open_error">手机中没有安装该应用</string> </resources>

(2)在APP的module的res中添加一个分享缩略图

(3)使用友盟自带的分享对话框界面或者自定义分享对话框界面区别如下【黄色是共用代码;橙色是自带分享对话框;绿色是自定义分享对话框】

package com.why.project.umengsharedemo;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast; import com.umeng.socialize.ShareAction;
import com.umeng.socialize.UMShareAPI;
import com.umeng.socialize.UMShareListener;
import com.umeng.socialize.bean.SHARE_MEDIA;
import com.umeng.socialize.media.UMImage;
import com.umeng.socialize.media.UMWeb; public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //显示分享底部区域【显示自定义分享对话框的代码】
/*Bundle bundle = new Bundle();
ShareDialog shareDialog = ShareDialog.getInstance(mContext,bundle);
shareDialog.setOnShareClickLitener(new ShareDialog.OnShareClickLitener() {
@Override
public void onShareToQQ() {
openShare("QQ");
}
@Override
public void onShareToQZone() {
openShare("QZone");
}
@Override
public void onShareToWX() {
openShare("WX");
}
@Override
public void onShareToWXCircle() {
openShare("WXCircle");
}
@Override
public void onShareToSina() {
openShare("Sina");
}
});
shareDialog.show(getSupportFragmentManager(), "Share");*/ } //友盟分享SDK--打开分享面板
private void openShare() {
UMWeb web = new UMWeb(getResources().getString(R.string.share_url));
web.setTitle(getResources().getString(R.string.share_title));//标题
UMImage thumb = new UMImage(this, R.drawable.share_thumb);//缩略图不要超过18k
thumb.compressStyle = UMImage.CompressStyle.SCALE;//大小压缩,默认为大小压缩,适合普通很大的图
web.setThumb(thumb); //缩略图
web.setDescription(getResources().getString(R.string.share_desc));//描述 new ShareAction(MainActivity.this)
.withMedia(web)
.setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.QZONE,SHARE_MEDIA.WEIXIN,SHARE_MEDIA.WEIXIN_CIRCLE,SHARE_MEDIA.WEIXIN_FAVORITE)
.setCallback(shareListener)
.open();
} //友盟分享SDK--打开分享面板
private void openShare(String type){
UMWeb web = new UMWeb(getResources().getString(R.string.share_url));
web.setTitle(getResources().getString(R.string.share_title));//标题
UMImage thumb = new UMImage(this, R.drawable.share_thumb);//缩略图不要超过18k
thumb.compressStyle = UMImage.CompressStyle.SCALE;//大小压缩,默认为大小压缩,适合普通很大的图
web.setThumb(thumb); //缩略图
web.setDescription(getResources().getString(R.string.share_desc));//描述 switch (type){
case "QQ":
new ShareAction(MainActivity.this)
.setPlatform(SHARE_MEDIA.QQ)//传入平台
.withMedia(web)//分享内容
.setCallback(shareListener)//回调监听器
.share();
break;
case "QZone":
new ShareAction(MainActivity.this)
.setPlatform(SHARE_MEDIA.QZONE)//传入平台
.withMedia(web)//分享内容
.setCallback(shareListener)//回调监听器
.share();
break;
case "WX":
new ShareAction(MainActivity.this)
.setPlatform(SHARE_MEDIA.WEIXIN)//传入平台
.withMedia(web)//分享内容
.setCallback(shareListener)//回调监听器
.share();
break;
case "WXCircle":
new ShareAction(MainActivity.this)
.setPlatform(SHARE_MEDIA.WEIXIN_CIRCLE)//传入平台
.withMedia(web)//分享内容
.setCallback(shareListener)//回调监听器
.share();
break;
case "Sina":
new ShareAction(MainActivity.this)
.setPlatform(SHARE_MEDIA.SINA)//传入平台
.withMedia(web)//分享内容
.setCallback(shareListener)//回调监听器
.share();
break;
} } private UMShareListener shareListener = new UMShareListener() {
/**
* @descrption 分享开始的回调
* @param platform 平台类型
*/
@Override
public void onStart(SHARE_MEDIA platform) {
}
/**
* @descrption 分享成功的回调
* @param platform 平台类型
*/
@Override
public void onResult(SHARE_MEDIA platform) {
}
/**
* @descrption 分享失败的回调
* @param platform 平台类型
* @param t 错误原因
*/
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
Log.e("why","t.getMessage()="+t.getMessage());//错误码:2008 错误信息:没有安装应用
if(t.getMessage().contains("2008")){
Toast.makeText(MainActivity.this,getResources().getString(R.string.share_open_error),Toast.LENGTH_SHORT).show();
}
}
/**
* @descrption 分享取消的回调
* @param platform 平台类型
*/
@Override
public void onCancel(SHARE_MEDIA platform) {
}
}; //友盟分享SDK--QQ
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);//友盟分享 }
}

混淆配置

#=====================友盟分享sdk=====================
-dontshrink
-dontoptimize
-dontwarn com.google.android.maps.**
-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 -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.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 im.yixin.sdk.api.YXMessage {*;}
-keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}
-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

参考资料

暂时空缺

项目demo下载地址

链接:https://pan.baidu.com/s/1n3DScJYDZS4ztuJMEFqrPg 提取码:wekp

UmengShareDemo【友盟分享SDK集成,基于V6.9.3版本】的更多相关文章

  1. 友盟分享SDK集成步骤

    1.官方注册appID. 2.menifest添加和声明umeng相关的activity以及appKey. 3. // 首先声明一个controller变量,由友盟服务工厂类直接取得友盟社交服务. m ...

  2. iOS开发——iOS10升级极光推送SDK、友盟分享SDK

    前不久升级了Xcode8 ,同时iOS10系统也推送久. 由于公司需要适配iOS 10系统,同时第三方sdk建议升级. 包含替换升级新的SDK和相应的代码修改. 主要分享如何升级极光推送SDK,友盟分 ...

  3. WP8 中使用HTML Agility Pack与友盟分享SDK遇到的 System.Xml.XPath加载问题

    今晚在尝试使用友盟最新的社交分享SDK时,按照官方Demo,并未做多少多少改动,就是去除了对微信.脸书和推特的分享.然后运行之后就一直报错 : {System.IO.FileLoadException ...

  4. UmengAppDemo【友盟统计SDK集成以及多渠道打包配置,基于V7.5.3版本】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这里只是记录下集成友盟统计SDK以及简单配置多渠道打包的步骤.所以1.该Demo不能运行:2.配置多渠道打包只是一种简单的写法,具体 ...

  5. Android 友盟分享详细集成过程及所遇问题解决

    最近项目需要针对微信.朋友圈.QQ.QQ空间集成友盟分享的功能,说实话,我也是第一次做,期间碰到过很多问题,这篇随笔就来写一下我是怎么集成友盟分享的,还有碰到哪些问题,都是怎样解决的! 其实集成友盟并 ...

  6. 集成友盟分享SDK报错

    删除4.2.1版本的reference换成4.3版本运行报错 解决办法:要将4.2.1版本的全部库文件物理删除,不要只删除reference.

  7. iOS开发——友盟分享

    ==========2016-01-29 更新=====刘成利 email:liu_cheng_li@qq.com========== 自己成功集成到公司的项目前,也已做了测试好的友盟分享demo 目 ...

  8. 友盟分享,极光推送Demo

    友盟分享SDK下载及官方文档 http://dev.umeng.com/social/ios/detail-share 1.注册应用获取App友盟Appkey(556d14ad67e58eb08400 ...

  9. iOS 微信支付SDK与微信友盟分享两者同时集成时,出现的问题与解决之路。

    这两天改版一个旧的APP,要旧貌换新颜,拿到app后进行编译,一直报下面的错误. 报不认识的符号名PayReq错误.奇怪,啥也没动就这样,真不知道给的包是不是本来就是个报错的工程. 不管怎样,要对它修 ...

随机推荐

  1. 提高测试脚本复用性降低DOM结构引起路径变化的影响

    问题描述 在定位元素时直接复制的xpath. 但是因为下面这些原因导致之前引用的路径失效, 不得不频繁修改脚本重新定位元素, 大降低了脚本的复用性, 也增加了维护的成本: 1. UI修改 (比如增加了 ...

  2. fasthttp 文档手册

    fasthttp 文档手册 貌似文章有最大长度限制,完整全文地址:https://github.com/DavidCai1993/my-blog/issues/35 常量 const ( Compre ...

  3. 关于EffictiveC++笔记

    我根据自己的理解,对原文的精华部分进行了提炼,并在一些难以理解的地方加上了自己的"可能比较准确"的「翻译」.

  4. mysql5.7安装和修改密码

    mysql5.7安装 第一 下载 https://downloads.mysql.com/archives/community/ 首先下载mysql5.7.18zip安装包 根据电脑配置选择32/64 ...

  5. 转载 python实例手册

    python实例手册 #encoding:utf8# 设定编码-支持中文 0说明 手册制作: 雪松 更新日期: 2013-12-19 欢迎系统运维加入Q群: 198173206 # 加群请回答问题 请 ...

  6. Windows环境下springboot集成redis的安装与使用

    一,redis安装 首先我们需要下载Windows版本的redis压缩包地址如下: https://github.com/MicrosoftArchive/redis/releases 连接打开后如下 ...

  7. Android 网络优化,使用 HTTPDNS 优化 DNS,从原理到 OkHttp 集成

    一.前言 谈到优化,首先第一步,肯定是把一个大功能,拆分成一个个细小的环节,再单个拎出来找到可以优化的点,App 的网络优化也是如此. 在 App 访问网络的时候,DNS 解析是网络请求的第一步,默认 ...

  8. 六大设计原则(三)DIP依赖倒置原则

    依赖倒置原则DIP(Dependence Inversion Principle) 依赖倒置原则的含义 高层模块不能依赖低层模块,二者都应该依赖其抽象. 抽象不应该依赖于细节. 细节应该依赖抽象. 什 ...

  9. vue之$root,$parent

    $root vue状态管理使用vuex,如果项目不大,逻辑不多,name我们没必要用vuex给项目增加难度,只需要用$root设置vue实例的data就行了,如下 main.js new Vue({ ...

  10. 度分秒转换十进制度 之Excel实现

    我们都知道,1°=60′,1′=60″,1°=3600″.那么,轻而易举容易计算:112°18′37.6″=112+18/60+37.6/3600≍112.3104444°这当然是有参考价值的,比如爬 ...