android 实现新浪微博登陆和分享

最近弄了一下新浪微博登陆和分享,差点把我玩死...新浪的官网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" />的话虽然也能分享成功,但是没有很好的获取到分享结果的操作了







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值