部分内容转载自 http://blog.csdn.net/wwj_748/article/details/41117173
本文介绍友盟包的使用,以 微信,QQ, 新浪 的第三方登录及分享为例
Demo实例 : http://download.csdn.net/detail/guige_csdn/8948685
一. 首先要有个友盟的帐号
https://www.umeng.com
二.在友盟创建新应用
https://www.umeng.com/apps?interest=social
三. 根据需要下载相应的SDK
http://dev.umeng.com/social/android/sdk-download
四. 安装SDK
https://www.umeng.com/apps?interest=social
方法A:快速集成工具 ( 推荐 )
1:解压SDK下载包,双击运行SDK根目录下的SDKIntegration.jar或者在命令行下输入java -jar SDKIntegration.jar运行集成工具;
2:选择Android工程的根目录,并且填写您的友盟App Key;
3:勾选所需平台和组件,点击"快速集成";
4:检查AndroidManifest.xml、jar文件是否正确。如果集成了QQ或者QZone,请修改相应地appid。如下图所示:
方法B:添加工程引用(升级方便,推荐)
解压SDK压缩包,将文件夹中的social_sdk_library_project文件夹导入Eclipse,并在您的工程中添加对此项目的引用即可。
方法C:添加资源到现有项目中
解压SDK压缩包,将文件夹中的'main/libs'和'main/res'文件夹复制到你的项目工程根目录下
(如使用'ADT 17'以下用户需要手动添加'libs'下的jar文件到工程BuildPath中):
![]() |
SDK压缩包目录 |
以上即配置好libs包(若用方法一成功了,则同时完成对anroidManifest.xml的配置)
五. anroidManifest.xml的配置
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.umengsharetestyjq"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<!-- ###################声明SDK使用的相关权限###################### -->
<!-- 检测网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 获取mac地址作为用户的备用唯一标识 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 获取用户手机的IMEI,用来唯一的标识用户 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 缓存资源优先存入SDcard -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 允许应用程序联网,以便向我们的服务器端发送数据 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- QQ、QQ空间所需权限 -->
<uses-permission android:name="android.permission.GET_TASKS" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.umengsharetestyjq.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 分享编辑页 -->
<activity
android:name="com.umeng.socialize.view.ShareActivity"
android:configChanges="orientation|keyboard"
android:launchMode="singleTask"
android:noHistory="true"
android:theme="@style/Theme.UMDialog"
android:windowSoftInputMode="stateVisible|adjustResize" >
</activity>
<!-- ############ QQ空间和QQ SSO授权的Activity注册 ############ -->
<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" />
<!-- 100424468,如果你使用的公用账号,则不需要修改;否则修改成你在QQ开放平台申请的 APP ID -->
<data android:scheme="tencent100424468" />
</intent-filter>
</activity>
<activity android:name="com.tencent.plus.ImageActivity" >
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>
<!-- 友盟的appkey -->
<meta-data
android:name="UMENG_APPKEY"
android:value="55b98dac67e58e07a1005262" />
</application>
</manifest>
六. 工程目录
其中WXEntryActivity.java 必须建立
WXEntryActivity.java
package com.example.wxapi;
import com.umeng.socialize.weixin.view.WXCallbackActivity;
public class WXEntryActivity extends WXCallbackActivity {
}
七. MainActivity中的内容
初始化友盟服务
// 友盟分享的服务
private UMSocialService controller = null;
/**
* 初始化与友盟分享SDK的信息
*/
private void initShareConfig() {
// context = this;
controller = UMServiceFactory.getUMSocialService("com.umeng.share");
// // 设置分享的内容
// controller
// .setShareContent("在这里设置要分享的内容");
//
// // 设置分享的图片
// String imageUrl =
// "http://img3.imgtn.bdimg.com/it/u=67026920,1094670043&fm=21&gp=0.jpg";
// controller.setShareMedia(new UMImage(context, imageUrl));
// SocializeConfig config = controller.getConfig();
// 开通短信分享
// config.setShareSms(true);
// 开通Email分享
// config.setShareMail(true);
// config.setPlatforms(SHARE_MEDIA.QZONE, SHARE_MEDIA.TENCENT);
// 微信平台的appID,要进行申请,跟eclipse的签名有关
String appID = "wx8d6b7769a63ae29a";
String appSecret = "49cabb635da062be492eeb83099530ca";
// 添加微信平台
UMWXHandler wxHandler = new UMWXHandler(this, appID, appSecret);
wxHandler.addToSocialSDK();
// 添加微信朋友圈
UMWXHandler wxCircleHandler = new UMWXHandler(this, appID, appSecret);
wxCircleHandler.setToCircle(true);
wxCircleHandler.addToSocialSDK();
// 添加QQ分享平台
UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(this, "100424468",
"c7394704798a158208a74ab60104f0ba");
qqSsoHandler.addToSocialSDK();
// 添加QQ空间分享平台
QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(this,
"100424468", "c7394704798a158208a74ab60104f0ba");
qZoneSsoHandler.addToSocialSDK();
// 新浪微博需要去申请授权后才能使用
// 设置新浪SSO handler
controller.getConfig().setSsoHandler(new SinaSsoHandler(this));
// 设置腾讯微博SSO handler
controller.getConfig().setSsoHandler(new TencentWBSsoHandler());
}
/**
* 根据不同的平台设置不同的分享内容</br>
*/
private void setShareContent() {
// 图片分享
UMImage localImage = new UMImage(this, R.drawable.ic_launcher);
UMImage urlImage = new UMImage(this,
"http://www.umeng.com/images/pic/social/integrated_3.png");
// UMImage resImage = new UMImage(LoginActivity.this, R.drawable.icon);
// 视频分享
UMVideo video = new UMVideo(
"http://v.youku.com/v_show/id_XNTc0ODM4OTM2.html");
// vedio.setThumb("http://www.umeng.com/images/pic/home/social/img-1.png");
video.setTitle("友盟社会化组件视频");
video.setThumb(urlImage);
video.setThumb(new UMImage(this, BitmapFactory.decodeResource(
getResources(), R.drawable.ic_launcher)));
// 音乐分享
UMusic uMusic = new UMusic(
"http://music.huoxing.com/upload/20130330/1364651263157_1085.mp3");
uMusic.setAuthor("umeng");
uMusic.setTitle("天籁之音");
uMusic.setThumb(urlImage);
// uMusic.setThumb("http://www.umeng.com/images/pic/social/chart_1.png");
// 分享到微信好友的内容
WeiXinShareContent weixinContent = new WeiXinShareContent();
weixinContent.setShareContent("来自友盟社会化组件(SDK)让移动应用快速整合社交分享功能,微信");
weixinContent.setTitle("友盟社会化分享组件-微信");
weixinContent.setTargetUrl("http://www.umeng.com");
weixinContent.setShareMedia(urlImage);
controller.setShareMedia(weixinContent);
// 设置朋友圈分享的内容
CircleShareContent circleMedia = new CircleShareContent();
circleMedia.setShareContent("来自友盟社会化组件(SDK)让移动应用快速整合社交分享功能,朋友圈");
circleMedia.setTitle("友盟社会化分享组件-朋友圈");
circleMedia.setShareImage(urlImage);
// circleMedia.setShareMedia(uMusic);
// circleMedia.setShareMedia(video);
circleMedia.setTargetUrl("http://www.umeng.com");
controller.setShareMedia(circleMedia);
UMImage qzoneImage = new UMImage(this,
"http://www.umeng.com/images/pic/social/integrated_3.png");
qzoneImage
.setTargetUrl("http://www.umeng.com/images/pic/social/integrated_3.png");
// 设置QQ空间分享内容
QZoneShareContent qzone = new QZoneShareContent();
qzone.setShareContent("这里是分享的内容");
qzone.setTargetUrl("http://www.baidu.com");
qzone.setTitle("这里是分享的标题");
qzone.setShareImage(urlImage);
controller.setShareMedia(qzone);
// 设置QQ 分享内容
QQShareContent qqShareContent = new QQShareContent();
qqShareContent.setShareContent("来自友盟社会化组件(SDK)让移动应用快速整合社交分享功能 -- QQ");
qqShareContent.setTitle("hello, title");
qqShareContent.setShareImage(urlImage);
// qqShareContent.setShareMusic(uMusic);
// qqShareContent.setShareVideo(video);
qqShareContent.setTargetUrl("http://www.umeng.com/social");
controller.setShareMedia(qqShareContent);
// 视频分享
UMVideo umVideo = new UMVideo(
"http://v.youku.com/v_show/id_XNTc0ODM4OTM2.html");
umVideo.setThumb("http://www.umeng.com/images/pic/home/social/img-1.png");
umVideo.setTitle("友盟社会化组件视频");
// 腾讯微博分享的内容
TencentWbShareContent tencent = new TencentWbShareContent();
tencent.setShareContent("来自友盟社会化组件(SDK)让移动应用快速整合社交分享功能,腾讯微博");
// 设置tencent分享内容
controller.setShareMedia(tencent);
// // 设置邮件分享内容, 如果需要分享图片则只支持本地图片
// MailShareContent mail = new MailShareContent(localImage);
// mail.setTitle("share form umeng social sdk");
// mail.setShareContent("来自友盟社会化组件(SDK)让移动应用快速整合社交分享功能,email");
// // 设置mail分享内容
// controller.setShareMedia(mail);
// // 设置短信分享内容
// SmsShareContent sms = new SmsShareContent();
// sms.setShareContent("来自友盟社会化组件(SDK)让移动应用快速整合社交分享功能,短信");
// sms.setShareImage(urlImage);
// controller.setShareMedia(sms);
// 新浪微博分享的内容
SinaShareContent sinaContent = new SinaShareContent();
sinaContent.setShareContent("来自友盟社会化组件(SDK)让移动应用快速整合社交分享功能,新浪微博");
// sinaContent.setShareImage(new UMImage( this,
// R.drawable.actionbar_back_indicator));
controller.setShareMedia(sinaContent);
}
其中,新浪微博在分享图片时出错了,发现分享图片是要另外申请权限的,错误代码列表:
http://open.weibo.com/wiki/Error_code
微信的分享是要先去申请开发者平台的应用的,审核通过了才能分享,且微信的第三方登录是要收费的,appkey跟eclipse的签名有关,所以用另一个eclipse编译之后,微信分享可能就用不了了,
相关的链接:
https://open.weixin.qq.com/
工具的下载:https://open.weixin.qq.com/cgi-bin/readtemplate?t=resource/app_download_android_tmpl&lang=zh_CN
八. 第三方登录流程
以下这张图转自:http://www.cnblogs.com/hooray/archive/2012/11/17/2774499.html
本人写的Demo实例 : http://download.csdn.net/detail/guige_csdn/8948685