最近弄了一下新浪微博登陆和分享,差点把我玩死...新浪的官网api和下载下来的pdf实在是写的太垃圾了,最后还是参考了demo和新浪pdf和百度了一大把教程才搞定,在这里记录一下,以备以后复习和使用
先去新浪微博成为开发者,然后创建应用,需要上传的东西都上传,下载新浪微博的签名工具,在eclipse中创建出这个工程,然后安装.签名工具把我们刚安装的应用的md5值得到,然后填入网页中,最后提交.不过还有要
使用的是新浪微博v3.0.1.jar这个包
在这里我们参考demo,把我们的apikey和回调地址都写在一个类常量类里面
1.首先创建一个authinfo对象,因为待会的Ssohandler对象的建立需要这个对象,这个对象需要四个参数,第一个是上下文对象,第二个是我们的app_key,第三个是回调地址,第四个是我们范伟描述,是一个字符串
authInfo = new AuthInfo(context, Constants.APP_KEY,
Constants.REDIRECT_URL, Constants.SCOPE);
2.创建一个SsoHandler对象
ssoHandler = new SsoHandler(Main.this, authInfo);
3.创建一个类实现WeiboAuthListener
// 授权时的监听
public class MyWeiBoAuthListener implements WeiboAuthListener {
@Override
public void onCancel() {
// TODO Auto-generated method stub
Toast.makeText(context, "onCancel", Toast.LENGTH_SHORT).show();
}
@Override
public void onComplete(Bundle arg0) {
// TODO Auto-generated method stub
Toast.makeText(context, "onComplete:" + arg0.toString(),
Toast.LENGTH_SHORT).show();
resultTextView.setText(arg0.toString());
}
@Override
public void onWeiboException(WeiboException arg0) {
// TODO Auto-generated method stub
Toast.makeText(context, "onWeiboException", Toast.LENGTH_SHORT)
.show();
}
}
4.在该activity里面实现onActivityResult,不然上面的那个监听根本没有用
//这个是用来看返回结果的,先接受返回结果,然后MyWeiBoAuthListener这里的才能得以执行
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (ssoHandler != null) {
ssoHandler.authorizeCallBack(requestCode, resultCode, data);
}
}
5.在配置文件中添加权限和微博登陆必须的activity
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 必须注册在微博授权,分享微博时候用到 -->
<activity
android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:windowSoftInputMode="adjustResize" >
</activity>
这个时候微博登陆已经完成的差不多了,登陆成功返回的是一个json字符串
新浪微博分享
1.首先创建一个IWeiboShareAPI对象,顺便把他注册到微博,不注册无法分享
iWeiboShareAPI = WeiboShareSDK.createWeiboAPI(share.this, Constants.APP_KEY);
iWeiboShareAPI.registerApp();//注册
2.分享函数的创建
public void Share() {
WeiboMultiMessage weiboMultiMessage = new WeiboMultiMessage();
weiboMultiMessage.textObject = getTextObj();
weiboMultiMessage.imageObject = getImageObject();
SendMultiMessageToWeiboRequest sendMultiMessageToWeiboRequest = new SendMultiMessageToWeiboRequest();
sendMultiMessageToWeiboRequest.transaction = "imgod"
+ System.currentTimeMillis();
sendMultiMessageToWeiboRequest.multiMessage = weiboMultiMessage;
iWeiboShareAPI.sendRequest(share.this, sendMultiMessageToWeiboRequest);
}
3.分享操作存在的activity实现IWeiboHandler.Response接口,并实现两个方法
@Override
protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub
super.onNewIntent(intent);
iWeiboShareAPI.handleWeiboResponse(intent, this);
}
@Override
public void onResponse(BaseResponse baseResp) {
// TODO Auto-generated method stub
switch (baseResp.errCode) {
case WBConstants.ErrorCode.ERR_OK:
Toast.makeText(this, "ERR_OK_分享成功", Toast.LENGTH_LONG).show();
break;
case WBConstants.ErrorCode.ERR_CANCEL:
Toast.makeText(this, "ERR_CANCEL_取消分享", Toast.LENGTH_LONG).show();
break;
case WBConstants.ErrorCode.ERR_FAIL:
Toast.makeText(this,"ERR_FAIL_分享失败" + "Error Message: " ,
Toast.LENGTH_LONG).show();
break;
}
}
4.在配置文件中声明该activity的action
<activity
android:name="com.example.test_sina.share"
>
<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下面,因为在同一个activity下面,第一个登陆授权的的activity的action是android.intent.action.Main
再添加这个<action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />的话虽然也能分享成功,但是没有很好的获取到分享结果的操作了