一、简单介绍
因为一个平台一个平台进行弄太麻烦,也不够统一,所以领导选择了umeng(我的内心是拒绝的),umeng的文档写的便于查找,但是比较分散,对于比较熟悉的很好用,没接触过umeng的肯定一脸懵逼,比如我,所以,我整理一篇,以后也好用到。
本文以6.4.5版本更新。
二、申请appkey
如果你已经申请了,请跳过1-6看下面的。
大部分平台进行分享、登录操作需要(zhuangbi)在第三方平台创建应用并提交审核,创建应用后,分享、登录操作时显示的应用icon、名称和对应开放平台设置有关,必须要创建应用的平台为:微信、新浪、QQ、Facebook、Kakao、LinkeIn、Twitter、钉钉.
根据自己需要进行申请平台账号。
1、新浪微博
登录新浪微博开放平台(http://open.weibo.com/),填写相关应用信息并上传icon图片。
就能获取到AppID及AppSecret。
ps:新浪和其他平台不同的是多一个授权回调页。
授权回调页的作用是成功授权之后会回调这个地址,把信息传给这个地址,可以随便设置一个,建议自家域名。
2、微信开放平台
登录微信开放平台(https://open.weixin.qq.com/),填写相关应用信息,审核通过后获取到微信AppID及AppSecret,如果需要微信登录功能,需要申请微信登录权限,注意微信登录有效期为一年,需要按时在微信平台认证
注意应用包名、签名设置必须和打包后的apk一致
3、 QQ及Qzone
QQ及Qzone使用同一个AppID及Appkey,登录腾讯开放平台(http://open.qq.com/) ,选择Android或iOS应用,填写相关应用信息并提交审核,未审核前通过只能使用测试账号
4、钉钉
阿里家的钉钉,莫名其妙火了起来。
登录钉钉开放平台 (https://open.dingtalk.com/?spm=a219a.7629140.0.0.95ChxP),登录后选择自助工具,创建分享应用
正确配置签名、包名及相应的应用icon等基本信息,注意应用包名、签名设置必须和打包后的apk一致
5、支付宝
登录蚂蚁金服开放平台(https://open.alipay.com/platform/home.htm),使用支付宝账号登录,注册APP。
6,剩下的Twitter Facebook 腾讯微博 LinkedIn 人人网 豆瓣之类的都去对应的开放平台申请账号(mdzz),如果你想集成他们的分享,我就不一一赘述了。
7、看这里,说一些重要的注意事项
1)所有平台,请正确配置签名、包名及相应的应用icon等基本信息,注意应用包名、签名设置必须和打包后的apk一致
2)我们认证是为了获取 id和key,这两个值很重要,整理放到一起,新浪微博比较特殊,多个回调地址。
3)我们需要把这些值配置到umeng后台,具体的如下图
选中自己的项目后,点击社会化分享里面的设置,给每个平台设置进去上面得到的id和key。
三、配置
1、umeng的集成工具
顺便提一下umeng的集成工具,很智能(zz)的集成工具,你熟练使用umeng之后,再用集成工具,就会觉得很方便。第一次,还是跳过吧,看下面的。
2、导入jar包
下载sdk后,会发现有精简版和完整版的区别,根据自己的需要下载需要的吧。
然后下面就是一些copy了,其实如果你使用umeng集成工具,你可以选择你需要集成的umeng会把你需要的jar包和资源放到一起,你不需要copy很多次了。(省略这项,看下面)
你需要copy下图这几个文件夹里面的所有东西
main是核心库
lib里面有三个jar,copy到工程libs下面
umeng_social_api.jar
umeng_social_net.jar
umeng_social_tool.jar
platforms是平台库
和核心库一样,copy里面的libs和res里面的文件,但对于平台来说可能会有回调activity,
支付宝: 把apshare这个文件(里面包含activity)直接copy到项目的包名下,com.xxx.xxx下面。
微信 :把wxapi这个文件(包含activity,精简版和完整版不同)放到copy项目包名下
钉钉与微信相似,钉钉需要在包名目录下创建ddshare文件夹,然后建立一个DDShareActivity的类,DingCallBack。
新浪和QQ 不需要回调activity,但是需要在登录分享的activity内加入回调
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
3、配置Android Manifest XML
这些权限都是必要的,已经存在的不需要再次添加。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
4、Android Manifest XML中配置activity
加上umeng的appkey
data
android:name="UMENG_APPKEY"
android:value="561cae6ae0f55abd990035bf" >
data>
新浪:
<activity
android:name="com.umeng.socialize.media.WBShareCallBackActivity"
android:configChanges="keyboardHidden|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="false"
android:screenOrientation="portrait" >
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=".apshare.ShareEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
钉钉:
<activity
android:name=".ddshare.DingCallBack"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
qq精简版:
<activity
android:name="com.umeng.qq.tencent.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.umeng.qq.tencent.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"/>
qq完整版:
<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:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"/>
5、配置友盟key及三方key
建立一个application文件,注意要在AndroidManifest文件中配置(如果本身已有,不需要重新建立):
"true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:name=".App"
android:theme="@style/AppTheme">
在application里面进行umeng的第三方key配置
这里作为示例,只配置了微信、QQ/Qzone、新浪的三方appkey,如果使用其他平台,在这里增加对应平台key配置
把前面在其他平台获取的key
public class App extends Application{
{
PlatformConfig.setWeixin(“wx967daebe835fbeac”, “5bb696d9ccd75a38c8a0bfe0675559b3”);
PlatformConfig.setQQZone(“100424468”, “c7394704798a158208a74ab60104f0ba”);
PlatformConfig.setSinaWeibo(“3921700954”, “04b48b094faeb16683c32669824ebdad”, “http://sns.whalecloud.com“);
}
}
当然初始化操作也放在application里面进行@Override
public void onCreate() {
super.onCreate();
UMShareAPI.get(this);
}
6、 将文件夹中的签名文件放入到工程中,这个不再赘述。
四,登录集成
1、登录的集成很简单,直接调用方法即可
第三方登录包含两种使用场景:
获取用户资料的授权接口,使用该接口可以获取该三方平台返回的所有资料(包括姓名,性别,头像等)
三方授权,开发者调用授权接口,可以获取accesstoken相关的信息,但是没有用户资料(姓名,性别,头像等),需要开发者根据token自己去请求用户资料,对于保密性要求较高的用户可以使用。 目前支持第三方登录的平台包括:
国内平台(微信、新浪微博、QQ、豆瓣、人人)
国外平台(Facebook、Twitter、linkedIn、kakao、VKontakte、Dropbox)
这里推荐直接使用第一种方式实现,因为本质上三方登录最终都需要拉取三方平台的用户资料,从这点来说,直接调用SDK和通过后台服务器请求,安全性是一样的
mShareAPI.getPlatformInfo(UserinfoActivity.this, SHARE_MEDIA.SINA, umAuthListener);
SHARE_MEDIA.SINA写入你需要的平台,umAuthListener是回调方法
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) {
Toast.makeText(mContext, "成功了", Toast.LENGTH_LONG).show();
}
/**
* @desc 授权失败的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
* @param t 错误原因
*/
@Override
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
Toast.makeText(mContext, "失败:" + t.getMessage(), Toast.LENGTH_LONG).show();
}
/**
* @desc 授权取消的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
*/
@Override
public void onCancel(SHARE_MEDIA platform, int action) {
Toast.makeText(mContext, "取消了", Toast.LENGTH_LONG).show();
}
};
onComplete方法是成功的方法,map集合中存储着用户信息。根据公司后台的需要把需要的信息拿过去走登录接口或者注册接口都可以。
一些常用参数。
获取用户资料可以使用如下接口:
mShareAPI.getPlatformInfo(UserinfoActivity.this, SHARE_MEDIA.SINA, umAuthListener);
“`
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) {
Toast.makeText(mContext, "成功了", Toast.LENGTH_LONG).show();
}
/**
* @desc 授权失败的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
* @param t 错误原因
*/
@Override
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
Toast.makeText(mContext, "失败:" + t.getMessage(), Toast.LENGTH_LONG).show();
}
/**
* @desc 授权取消的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
*/
@Override
public void onCancel(SHARE_MEDIA platform, int action) {
Toast.makeText(mContext, "取消了", Toast.LENGTH_LONG).show();
}
};
“
分享实现看 umeng(友盟)实现第三方登录和分享详解之分享