UmengShareDemo【友盟分享SDK集成,基于V6.9.3版本】
版权声明:本文为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版本】的更多相关文章
- 友盟分享SDK集成步骤
1.官方注册appID. 2.menifest添加和声明umeng相关的activity以及appKey. 3. // 首先声明一个controller变量,由友盟服务工厂类直接取得友盟社交服务. m ...
- iOS开发——iOS10升级极光推送SDK、友盟分享SDK
前不久升级了Xcode8 ,同时iOS10系统也推送久. 由于公司需要适配iOS 10系统,同时第三方sdk建议升级. 包含替换升级新的SDK和相应的代码修改. 主要分享如何升级极光推送SDK,友盟分 ...
- WP8 中使用HTML Agility Pack与友盟分享SDK遇到的 System.Xml.XPath加载问题
今晚在尝试使用友盟最新的社交分享SDK时,按照官方Demo,并未做多少多少改动,就是去除了对微信.脸书和推特的分享.然后运行之后就一直报错 : {System.IO.FileLoadException ...
- UmengAppDemo【友盟统计SDK集成以及多渠道打包配置,基于V7.5.3版本】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这里只是记录下集成友盟统计SDK以及简单配置多渠道打包的步骤.所以1.该Demo不能运行:2.配置多渠道打包只是一种简单的写法,具体 ...
- Android 友盟分享详细集成过程及所遇问题解决
最近项目需要针对微信.朋友圈.QQ.QQ空间集成友盟分享的功能,说实话,我也是第一次做,期间碰到过很多问题,这篇随笔就来写一下我是怎么集成友盟分享的,还有碰到哪些问题,都是怎样解决的! 其实集成友盟并 ...
- 集成友盟分享SDK报错
删除4.2.1版本的reference换成4.3版本运行报错 解决办法:要将4.2.1版本的全部库文件物理删除,不要只删除reference.
- iOS开发——友盟分享
==========2016-01-29 更新=====刘成利 email:liu_cheng_li@qq.com========== 自己成功集成到公司的项目前,也已做了测试好的友盟分享demo 目 ...
- 友盟分享,极光推送Demo
友盟分享SDK下载及官方文档 http://dev.umeng.com/social/ios/detail-share 1.注册应用获取App友盟Appkey(556d14ad67e58eb08400 ...
- iOS 微信支付SDK与微信友盟分享两者同时集成时,出现的问题与解决之路。
这两天改版一个旧的APP,要旧貌换新颜,拿到app后进行编译,一直报下面的错误. 报不认识的符号名PayReq错误.奇怪,啥也没动就这样,真不知道给的包是不是本来就是个报错的工程. 不管怎样,要对它修 ...
随机推荐
- 底层网络技术以及IP编址
网络信息的传输在最底层总是依托于物理介质来进行传输的,这里的传输介质分为两种: 有线介质 导线管(导向媒体).例如:双绞线.同轴电缆.光纤等 无线介质 电磁波(非导向媒体):利用各种波长的电磁波充 ...
- 【LOJ #6094. 「Codeforces Round #418」归乡迷途】
题目大意: 传送门. lca说的很明白就不重复了. 题解: 先膜一发lca. 大体读完题以后我们可以知道对于第i个节点最短路一定是连向1到i-1中的某个点. 然后我们考虑将到1距离(这里及以下均是最短 ...
- bzoj 4501 旅行
01分数规划+最大权闭合子图 倒拓扑序处理每个节点 $$f[x]=\frac{\sum{f[v]}}{n}+1$$ 二分答案$val$ 只需要判断是否存在$\sum{f[v]}+1-val>0$ ...
- BZOJ_4867_[Ynoi2017]舌尖上的由乃_分块+dfs序
BZOJ_4867_[Ynoi2017]舌尖上的由乃_分块+dfs序 Description 由乃为了吃到最传统最纯净的美食,决定亲自开垦一片菜园.现有一片空地,由乃已经规划n个地点准备种上蔬菜.最新 ...
- 面试题之小炼牛刀zip,lambda,map
# 现有两元祖,(('a'),('b')),(('c'),('d'))# 请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]t1=(('a'),('b'))t2=(('c' ...
- js模块化 javascript 模块化 闭包写法 闭包模块化写法
var main = main || {}; ; (function (main) { 'use strict'; //私有变量 var _s1 = 'Hello '; var _s2 = 'Worl ...
- JAVA基础第五章-集合框架Map篇
业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...
- Spark学习之编程进阶总结(一)
一.简介 这次介绍前面没有提及的 Spark 编程的各种进阶特性,会介绍两种类型的共享变量:累加器(accumulator)与广播变量(broadcast variable).累加器用来对信息进行聚合 ...
- OpenResty 在又拍云容器平台中的应用
大家好,我是又拍云叶靖,今天主要分享 OpenResty 在又拍云容器平台中的应用.目前又拍云有很多产品,其中很多都使用了 OpenResty 技术,比如又拍云的 CDN .网关都是基于 OpenRe ...
- Android6.0 源码修改之 Contacts应用
一.Contacts应用的主界面和联系人详情界面增加顶部菜单添加退出按钮 通过Hierarchy View 工具可以发现 主界面对应的类为 PeopleActivity 联系人详情界面对应的类为 Qu ...