android.jpg

集成准备(获取AppKey)

第一步.png

第二步.png

第三步.png

第四步.png

第五步.png

第六步.png

这里就可以拿到友盟的AppKey了接下来集成友盟

这里我选择的是手动集成

1、获取SDK(下载最新SDK)

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

3、添加回调Activity(这里只做微信的回调 在包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。)

微信.png

QQ与新浪

/**

* @param requestCode

* @param resultCode

* @param data

*QQ与新浪不需要添加Activity,但需要在使用QQ分享或者授权的

*Activity中,添加

*注意onActivityResult不可在fragment中实现,如果在fragment中

*调用登录或分享,

* 需要在fragment依赖的Activity中实现

*/

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);

}

4、配置Android Manifest XML

sdk中需要的Activity

1、新浪

android:name="com.umeng.socialize.media.WBShareCallBackActivity"

android:configChanges="keyboardHidden|orientation"

android:theme="@android:style/Theme.Translucent.NoTitleBar"

android:exported="false"

>

android:configChanges="keyboardHidden|orientation"

android:exported="false"

android:windowSoftInputMode="adjustResize"

>

android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"

android:launchMode="singleTask"

android:name="com.sina.weibo.sdk.share.WbShareTransActivity">

2、微信

android:name=".wxapi.WXEntryActivity"

android:configChanges="keyboardHidden|orientation|screenSize"

android:exported="true"

android:theme="@android:style/Theme.Translucent.NoTitleBar" />

3、qq(请注意将我们的qq appkey替换成您自己的qq appkey)

android:name="com.tencent.tauth.AuthActivity"

android:launchMode="singleTask"

android:noHistory="true" >

android:name="com.tencent.connect.common.AssistActivity"

android:theme="@android:style/Theme.Translucent.NoTitleBar"

android:configChanges="orientation|keyboardHidden|screenSize"/>

其他平台的配置请参照附录其他平台配置。

权限添加

请在AndroidManifest中添加如下权限

如果需要使用QQ纯图分享或避免其它平台纯图分享的时候图片不被压缩,可以增加以下权限:

Android6.0权限适配

请查看你的build.gradle文件,如果 targetSdkVersion小于或等于22,可以忽略这一步,如果大于或等于23,需要做权限的动态申请:

if(Build.VERSION.SDK_INT>=23){

String[] mPermissionList = new String[]{

Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE}; ActivityCompat.requestPermissions(this,mPermissionList,123);

}

其中123是requestcode,可以根据这个code判断,用户是否同意了授权。如果没有同意,可以根据回调进行相应处理:

@Override

public void onRequestPermissionsResult(int requestCode,

String permissions[], int[] grantResults) {

}

初始化设置(该设置需要在Application中进行设置)

初始化需要在您的Application中调用我们的初始化接口:

private void initUM() {

//初始化友盟

UMConfigure.init(this, "5d6901f43fc195884900017d"

, "umeng", UMConfigure.DEVICE_TYPE_PHONE, "");

//设置组件化的log开关测试方便查看日志,在release的时候记着关闭

UMConfigure.setLogEnabled(true);

//设置日志加密

// UMConfigure.setEncryptEnabled(true);

//设置各个平台appKey 这里只写了QQ的 其他的可以根据文档自己添加

PlatformConfig.setQQZone("", "");

}

更多了解初始化接口可以参照文档

签名配置

签名的概念将文件夹中的签名文件放入到工程中

这里就不详细说如何生成签名文件

添加签名步骤

Ctrl+Alt+Shift+S——>Modules——>Signing——>将签名添加到项目

签名文件如果不加,部分平台的授权会受到影响。

使用分包功能的注意事项(这里我还没研究)

部分用户可能会由于方法数限制问题使用了multiDexEnabled true对于这部分用户,需要正确配置application否则可能会出现NoClassDefFoundError具体配置可以参照MultiDex教学

混淆设置

-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.** {

*;

}

-keep class com.twitter.** { *; }

-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

分享(带面板)

new ShareAction(MainActivity.this)

.withText("hello")

.setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN)

.setCallback(umShareListener).open();

关于分享面板的更多功能可以参照分享面板自定义。

分享(不带面板)

new ShareAction(MainActivity.this)

.setPlatform(SHARE_MEDIA.QQ)//传入平台

.withText("hello")//分享内容

.setCallback(umShareListener)//回调监听器

.share();

其中umShareListener为回调监听,构建如下:

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) {

Toast.makeText(ShareSdkActivity.this, "成功了", Toast.LENGTH_LONG).show();

}

/**

* @descrption 分享失败的回调

* @param platform 平台类型

* @param t 错误原因

*/

@Override

public void onError(SHARE_MEDIA platform, Throwable t) {

Log.e("失败原因", t.getMessage() + "");

Toast.makeText(ShareSdkActivity.this, "失败了" + t.getMessage(), Toast.LENGTH_LONG).show();

}

/**

* @descrption 分享取消的回调

* @param platform 平台类型

*/

@Override

public void onCancel(SHARE_MEDIA platform) {

Toast.makeText(ShareSdkActivity.this, "取消了", Toast.LENGTH_LONG).show();

}

};

分享的消息类型

文本

new ShareAction(ShareSdkActivity.this)

.withText("hello")

.withMedia(umImage)

.setDisplayList(SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE,SHARE_MEDIA.WEIXIN)

.setCallback(shareListener).open();

注意: 分享到QQ好友暂不支持纯文本分享,调用友盟分享可以在失败回调里面进行操作

图片

在使用ShareAction的时候,调用withMedia可以设置一个UMImage(图片分享),UMImage的构建有如下几种形式

UMImage image = new UMImage(ShareActivity.this, "imageurl");//网络图片

UMImage image = new UMImage(ShareActivity.this, file);//本地文件

UMImage image = new UMImage(ShareActivity.this, R.drawable.xxx);//资源文件

UMImage image = new UMImage(ShareActivity.this, bitmap);//bitmap文件

UMImage image = new UMImage(ShareActivity.this, byte[]);//字节流

推荐使用网络图片和资源文件的方式,平台兼容性更高。对于部分平台,分享的图片需要设置缩略图,缩略图的设置规则为:

UMImage umImage = new UMImage(ShareSdkActivity.this, R.mipmap.tab_icon_main);

用户设置的图片大小最好不要超过250k,缩略图不要超过18k,如果超过太多(最好不要分享1M以上的图片,压缩效率会很低),图片会被压缩。用户可以设置压缩的方式:

image.compressStyle = UMImage.CompressStyle.SCALE;//大小压缩,默认为大小压缩,适合普通很大的图

image.compressStyle = UMImage.CompressStyle.QUALITY;//质量压缩,适合长图的分享

压缩格式设置

image.compressFormat = Bitmap.CompressFormat.PNG;//用户分享透明背景的图片可以设置这种方式,但是qq好友,微信朋友圈,不支持透明背景图片,会变成黑色

最后调用分享

new ShareAction(ShareSdkActivity.this)

.withText("hello")

.withMedia(umImage)

.setDisplayList(SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE,SHARE_MEDIA.WEIXIN)

.setCallback(shareListener).open();

链接

UMWeb web = new UMWeb("http://mobile.umeng.com/social");

web.setTitle("This is music title");//标题

web.setThumb(new UMImage(ShareSdkActivity.this, R.mipmap.ic_launcher)); //缩略图

web.setDescription("测试链接dhasjdh");//描述

new ShareAction(ShareSdkActivity.this)

.withText("测试")

.withMedia(web)

.setPlatform(SHARE_MEDIA.QQ)

//.setDisplayList(SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE)

.setCallback(shareListener)

.share();

视频

UMVideo video = new UMVideo(videourl);

video.setTitle("This is music title");//视频的标题

video.setThumb(image);//视频的缩略图

video.setDescription("my description");//视频的描述

new ShareAction(ShareSdkActivity.this)

.withText("测试")

.withMedia(video)

.setPlatform(SHARE_MEDIA.QZONE)

//.setDisplayList(SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE)

.setCallback(shareListener)

.share();

音乐

UMImage image1 = new UMImage(ShareSdkActivity.this, "http://www.umeng.com/images/pic/social/chart_1.png");//网络图片

UMusic music = new UMusic(musicurl);//音乐的播放链接

music.setTitle("This is music title");//音乐的标题

music.setThumb(image1);//音乐的缩略图

music.setDescription("my description");//音乐的描述

music.setmTargetUrl(url);//音乐的跳转链接

new ShareAction(ShareSdkActivity.this)

.withText("测试")

.withMedia(music)

.setPlatform(SHARE_MEDIA.QZONE)

//.setDisplayList(SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE)

.setCallback(shareListener)

.share();

特别说明:播放链接是指在微信qq分享音乐,是可以在当前聊天界面播放的,要求这个musicurl(播放链接)必须要以.mp3等音乐格式结尾,跳转链接是指点击linkcard之后进行跳转的链接。

GIF

//目前只有微信好友分享支持Emoji表情,其他平台暂不支持

UMEmoji emoji = new UMEmoji(this, "http://img5.imgtn.bdimg.com/it/u=2749190246,3857616763&fm=21&gp=0.jpg");

emoji.setThumb(new UMImage(this, R.drawable.umeng_socialize_qzone));

new ShareAction(ShareSdkActivity.this)

.withText("测试")

.withMedia(emoji)

.setPlatform(SHARE_MEDIA.QZONE)

//.setDisplayList(SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE)

.setCallback(shareListener)

.share();

QQ授权登录

这里我判断的是如果以获取授权直接获取用户信息

如果每次都需要授权的话 新加一个退出登录按钮 点击删除授权

获取用户QQ授权状态 true 已授权 false 未授权

boolean isauth = UMShareAPI.get(ShareSdkActivity.this).isAuthorize(ShareSdkActivity.this, SHARE_MEDIA.QQ);

if (isauth) {

//已经授权成功过,直接去结果界面获取用户信息

startActivityFinish(LoginResultActivity.class);

} else {

//授权

UMShareAPI.get(this).doOauthVerify(ShareSdkActivity.this, SHARE_MEDIA.QQ, authListener);

}

UMAuthListener authListener = new UMAuthListener() {

/**

* @desc 授权开始的回调

* @param platform 平台名称

*/

@Override

public void onStart(SHARE_MEDIA platform) {

}

/**

* @desc 授权成功的回调

* @param platform 平台名称

* @param action 行为序号,开发者用不上

* @param data 用户资料返回

*/

@Override

public void onComplete(SHARE_MEDIA platform, int action, Map data) {

startActivityFinish(LoginResultActivity.class);

Toast.makeText(ShareSdkActivity.this, "成功了", Toast.LENGTH_LONG).show();

}

/**

* @desc 授权失败的回调

* @param platform 平台名称

* @param action 行为序号,开发者用不上

* @param t 错误原因

*/

@Override

public void onError(SHARE_MEDIA platform, int action, Throwable t) {

Toast.makeText(ShareSdkActivity.this, "失败:" + t.getMessage(), Toast.LENGTH_LONG).show();

}

/**

* @desc 授权取消的回调

* @param platform 平台名称

* @param action 行为序号,开发者用不上

*/

@Override

public void onCancel(SHARE_MEDIA platform, int action) {

Toast.makeText(ShareSdkActivity.this, "取消了", Toast.LENGTH_LONG).show();

}

};

String name = data.get("name");

String gender = data.get("gender");

String iconurl = data.get("iconurl");

Log.e("姓名", name + "");

Log.e("性别", gender + "");

Log.e("头像Url", iconurl + "");

登录成功后,第三方平台会将用户资料传回, 全部会在Map data中返回,,由于各个平台对于用户资料的标识不同,因此为了便于开发者使用,友盟将一些常用的字段做了统一封装,开发者可以直接获取,不再需要对不同平台的不同字段名做转换,这里列出我们封装的字段及含义。

用户信息.png

删除授权

UMShareAPI.get(ShareSdkActivity.this).deleteOauth(ShareSdkActivity.this, SHARE_MEDIA.QQ,authListener);

有很多集体的细节我们需要去友盟官方文档查看

下一篇会将通过友盟实现微信、微博剩余的相关操作以及封装到工具类方便后续使用期待你的关注!!!

第三方登录、分享相关文章阅读

android qq授权申请appkey,手把手带你集成友盟实现授权登录、分享相关推荐

  1. Android 项目必备(三十七)-->使用友盟集成 QQ、微信、微博等第三方分享与登录

    文章目录 效果图 实战 最近项目需要加入第三方分享和登录功能,之前其他项目的第三方分享和登录一直都使用ShareSDK实现的.为了统一使用友盟的全家桶,所以三方分享和登录也就选择了友盟. 效果图 实战 ...

  2. Android开发之带你轻松集成友盟统计

    友盟统计是什么呢?为什么要集成他呢? 当我们需要获取自己写的软件的装机量和用户使用信息时,这时我们可以集成友盟统计. 首先到友盟统计中注册账号什么的就不废话了,直接看创建项目: 在个人中心中的管理里面 ...

  3. iOS开发集成友盟,腾讯QQ登录授权失败

    在项目中集成友盟,腾讯QQ登录,登录授权失败110406. 原因: app在测试阶段(未上线),授权的QQ账号和腾讯开放平台的QQ账号不是同一账号. 解决办法: 在腾讯开放平台中,应用接入--应用管理 ...

  4. Android应用开发-小巫CSDN博客客户端之集成友盟社会化分享组件

    Android应用开发-小巫CSDN博客客户端之集成友盟社会化分享组件 上一篇博客给大家介绍了如何分析网页并且使用jsoup这个库对html代码进行解析,本篇博客继续给大家介绍如何集成友盟社会化组件, ...

  5. Android app集成友盟微社区详细步骤

    引导语:现在Android app开发已经趋于更快速,功能更加丰富,运行更加优化方向发展,而且开发趋势更趋向于单枪匹马,在个人能力有限情况下,想要完成高级功能,只能用引入第三方的方法(目前市面上只有友 ...

  6. Android集成友盟社会化分享

    现在社会化分享组件有很多友推.Mob的ShareSDK.友盟社会化分享组件等,前面两种以前在做项目的时候用到过,最近的项目需要实现分享视频到各社交平台,对比了这三种组件觉得友盟社会化分享组件更适合这个 ...

  7. Android应用开发-小巫CSDN博客客户端之集成友盟社会化分享组件,2021最新Android框架体系架构面试题

    下面是详细的集成过程: 首先来到官网:http://www.umeng.com/ 选择社会化分享,进入查看这个产品的介绍,下载对应平台的SDK,笔者这里自然是选择Android平台: 笔者集成友盟社会 ...

  8. Android 集成友盟统计

    先在友盟上创建一个产品,友盟官方网址 选择上面的产品->移动统计,在页面里点击进入新版 创建完成后就会产生我们需要的appkey 现在开始集成 在项目的build.gradle里添加 allpr ...

  9. android 友盟统计功能,在Android工程中集成友盟统计

    在Android工程中集成友盟统计 首先需要在友盟官网注册账号并添加新应用,获取Appkey.具体步骤这里不进行叙述. 1.集成准备 首先需要集成友盟统计SDK 有两种方式: 1.下载SDK,并复制到 ...

最新文章

  1. lucene源码分析(8)MergeScheduler
  2. Ubuntu学习——第一篇
  3. jquery在选择器中使用变量及innerText问题(转载)
  4. MySQL -通过调整索引提升查询效率
  5. OS - 计算机组成原理及CPU主频揭秘
  6. [原创]浅析汇编之堆栈平衡
  7. Beyond Compare比较class文件
  8. 教育行业数据防泄密解决方案
  9. 中国大学MOOC|C语言程序设计(浙江大学翁恺)|习题与解答
  10. 物理动画流体实现流程(Physically Based Fluid Animation)
  11. DOM详解(五):DOM常用对象
  12. python floor函数_Python floor() 函数
  13. java的平均年龄怎么算,C#接收5个年龄和计算平均年龄
  14. PowerDesigner16.7 安装与配置
  15. 机器视觉基础知识/经典系统/常用领域以及机器视觉常用的图像处理库
  16. python音频两条路径_使用Python实现音频双通道分离
  17. UART通信基本概念
  18. 【Cisco Packet Tracer(思科)交换机和路由器配置实例】
  19. 人工智能发展之路还很长
  20. 联想台式机扬天系列设置双屏显示

热门文章

  1. day-44(2)mysql
  2. 个人账本软件---界面设计
  3. python3-基础篇-02-输入输出、注释
  4. html 萤火虫特效,jquery萤火虫飞舞动画特效插件
  5. ProM开发指北2——环境设置
  6. Golang学习(二十四)家庭记账项目
  7. torch.prob
  8. 上海居住证办理(闵行)
  9. 什么是内存屏障? Why Memory Barriers ?
  10. Failed connect to github-production-release-asset-2e65be.s3.amazonaws.com:443; 连接超时