提要: QQ ,微信分享 ,新浪分享(需要授权后分享)
QQ开发者平台登录网址:(免登录分享)
http://open.qq.com/login
微博分享:(如果只需要分享功能不需要审核)
1.注册开发者账号
进入新浪微博提供的开放平台 注册新浪账号:http://open.weibo.com/
在管理中心需要创建一个应用,得到Appkey,如果只是实现分享的功能也不需要提交审核。
2.应用信息
基本信息页面:需要填写Android签名
签名工具下载地址:https://github.com/mobileresearch/weibo_android_sdk/blob/master/app_signatures.apk
安装到手机,打开签名工具输入包名,生成一个唯一的MD5校验码,填写即可。
高级信息页面:需要填写授权回调页面,需要与程序代码中的REDIRECT_URL一致,如下图所示
3.讲WeiboSDK引入到自己的项目当中
WeiboSDK下载地址:http://open.weibo.com/wiki/SDK#Android_SDK
4.实现认证及分享
<pre name="code" class="java">
/**
* 该类演示了第三方应用如何通过微博客户端分享内容。
* 执行流程: 从本应用->微博->本应用
*/
public class WBShareActivity extends Activity implements Response,
OnClickListener {
/** 微博分享按钮 */
private Button mShareButton;
/** 微博实例 */
private AuthInfo mAuthInfo;
/** 注意:SsoHandler 仅当 SDK 支持 SSO 时有效 */
private SsoHandler mSsoHandler;
/** 封装了 "access_token","expires_in","refresh_token",并提供了他们的管理功能 */
private Oauth2AccessToken mAccessToken;
/** 是否安装微博*/
private boolean isInstalledWeibo;
/** 支持Api级别*/
private int supportApiLevel;
/** 微博分享的接口实例 */
private IWeiboShareAPI mWeiboShareAPI;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wbshare);
//点击执行分享操作
mShareButton = (Button) findViewById(R.id.register_app_to_weibo);
mShareButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// 创建微博实例
mAuthInfo = new AuthInfo(this, Constants.WB_APP_KEY,
Constants.REDIRECT_URL, Constants.SCOPE);
mSsoHandler = new SsoHandler(this, mAuthInfo);
// SSO 授权, 仅客户端
mSsoHandler.authorizeClientSso(new AuthListener());
// 创建微博 SDK 接口实例
mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this,
Constants.WB_APP_KEY);
// 注册第三方应用到微博客户端中,注册成功后该应用将显示在微博的应用列表中。
// 但该附件栏集成分享权限需要合作申请,详情请查看 Demo 提示
// NOTE:请务必提前注册,即界面初始化的时候或是应用程序初始化时,进行注册
mWeiboShareAPI.registerApp();
// 当 Activity 被重新初始化时(该 Activity 处于后台时,可能会由于内存不足被杀掉了),
// 需要调用 {@link IWeiboShareAPI#handleWeiboResponse} 来接收微博客户端返回的数据。
// 执行成功,返回 true,并调用 {@link IWeiboHandler.Response#onResponse};
// 失败返回 false,不调用上述回调
mWeiboShareAPI.handleWeiboResponse(getIntent(), this);
// 获取微博客户端是否安装
isInstalledWeibo = mWeiboShareAPI.isWeiboAppInstalled();
// 支持 SDK 的版本
supportApiLevel = mWeiboShareAPI.getWeiboAppSupportAPI();
}
/**
* 微博认证授权回调类。 1. SSO 授权时,需要在 {@link #onActivityResult} 中调用
* {@link SsoHandler#authorizeCallBack} 后, 该回调才会被执行。 2. 非 SSO
* 授权时,当授权结束后,该回调就会被执行。 当授权成功后,请保存该 access_token、expires_in、uid 等信息到
* SharedPreferences 中。
*/
class AuthListener implements WeiboAuthListener {
@Override
public void onComplete(Bundle values) {
// 从 Bundle 中解析 Token
mAccessToken = Oauth2AccessToken.parseAccessToken(values);
// 判断AccessToken是否有效
if (mAccessToken.isSessionValid()) {
// 保存 Token 到 SharedPreferences
AccessTokenKeeper.writeAccessToken(WBShareActivity.this,mAccessToken);
Toast.makeText(WBShareActivity.this, "获取token成功",Toast.LENGTH_SHORT).show();
shareToWeiBo();
} else {
System.out.println("认证失败");
}
}
@Override
public void onCancel() {
Toast.makeText(WBShareActivity.this, "取消", Toast.LENGTH_LONG)
.show();
}
@Override
public void onWeiboException(WeiboException e) {
Toast.makeText(WBShareActivity.this,
"Auth exception : " + e.getMessage(), Toast.LENGTH_LONG)
.show();
}
}
/**
* 分享到微博
*/
private void shareToWeiBo() {
if (isInstalledWeibo) {
if (mWeiboShareAPI.isWeiboAppSupportAPI()) {
if (supportApiLevel >= 10351 /* ApiUtils.BUILD_INT_VER_2_2 */) {
// 1. 初始化微博的分享消息
WeiboMultiMessage weiboMessage = new WeiboMultiMessage();
//这里指实现了分享文本內容 还可以分享 图片 视频 音乐 声音 网页 详见WeiboSDKDemo
TextObject textObject = new TextObject();
textObject.text = "分享消息";
weiboMessage.textObject = textObject;
// 2. 初始化从第三方到微博的消息请求
SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest();
// 用transaction唯一标识一个请求
request.transaction = String.valueOf(System
.currentTimeMillis());
request.multiMessage = weiboMessage;
// 3. 发送请求消息到微博,唤起微博分享界面
mWeiboShareAPI.sendRequest(WBShareActivity.this, request);
}
} else {
Toast.makeText(this, "SDK不支持", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(this, "没有安装新浪微博客户端", Toast.LENGTH_LONG).show();
}
遇到的问题:
授权时:
文件不存在 c8998
有两种情况:应用的签名不一致,微博回调 不一致
解决办法:新浪开发者-》我的应用(上方)--》应用信息--》高级信息(子目录)--》)
OAuth2.0 授权设置
授权回调页:
mAuthInfo = new AuthInfo(this, Constants.WB_APP_KEY,
Constants.REDIRECT_URL, Constants.SCOPE); Constants.REDIRECT_URL 要一致。
第二种就是签名问题了。分享时,需要先打包(或者配置debug 签名)。