终于成功实现了新浪平台的分享功能。中间遇到了各种各样的问题,楼主也是醉了。
现在好多应用都实现新浪,QQ,腾讯等三方平台功能,这时一般来说会有两种解决办法。
1:利用ShareSdk;这种方式比较简单。去下载他们官方SDK,里边介绍的很详细,这里不多说。
2:利用各自官方SDK。这种方式你就需要去看下官方SDK中Demo的实现。这里那Sina分享为例详细说下
第一步:去新浪官方开发者平台注册你的应用:http://open.weibo.com/development/mobile。这个地方相信都知道怎么做,不多阐述
但要注意的一点是:你的应用程序的包名,签名。以及高级信息里的回调地址务必要填写:包名是你自己应用AndroidManifest.xml中的,
签名一定要用官方提供的MD5签名生成工具。至于回调地址,使用官方推荐的就可以,个人是http://www.sian.com
第二步:去下载官方Android SDK.(我会在后边给你们提供),解压后名字叫做 weibo_android_sdk-master的文件。里边有WeiboSDK,WeiBoSDKDemo, 以及
api文档。
第三步: 就是正式开发了。
1:首先准备工作
把WeiboSDK (作为你项目的Liarbery,必须)与WeiBoSDKDemo(只是官方的Demo,里边有相关实现的方法,可以看下,
非必须)导入到eclipse。 然后新建你自己的项目(假设项目名为SinaDemo),右键你的项目—prpperties—android—右侧add—选择WeiboSDK.
2: 然后具体实现,在我的项目中的main中有两个Button。(我的是点击Button1后弹出新浪登录界面,为的是拿到授权,即
Oauth2AccessToken mAccessToken。点击Button2后跳转发微博界面。你可以参考你自己的逻辑来实现。但原理相同。即拿到这
个 Oauth2AccessToken mAccessToken后才可以完成分享)
3:在你的MainActivity的Oncreate中声明这个:
AuthInfo mAuthInfo=new AuthInfo(this, Constants.APP_KEY, Constants.REDIRECT_URL,null);
其中的
/** * 该类定义了微博授权时所需要的参数。 * * @author SINA * @since 2013-09-29 */ public interface Constants { /** 当前 DEMO 应用的 APP_KEY,第三方应用应该使用自己的 APP_KEY 替换该 APP_KEY */ public static final String APP_KEY= "1639150612";//换成你自己的 /** * 当前 DEMO 应用的回调页,第三方应用可以使用自己的回调页。 * * <p> * 注:关于授权回调页对移动客户端应用来说对用户是不可见的,所以定义为何种形式都将不影响, * 但是没有定义将无法使用 SDK 认证登录。 * 建议使用默认回调页:https://api.weibo.com/oauth2/default.html * </p> */ public static final String REDIRECT_URL = "http://www.sina.com";//你注册应用填写的回调地址。 /** * Scope 是 OAuth2.0 授权机制中 authorize 接口的一个参数。通过 Scope,平台将开放更多的微博 * 核心功能给开发者,同时也加强用户隐私保护,提升了用户体验,用户在新 OAuth2.0 授权页中有权利 * 选择赋予应用的功能。 * * 我们通过新浪微博开放平台-->管理中心-->我的应用-->接口管理处,能看到我们目前已有哪些接口的 * 使用权限,高级权限需要进行申请。 * * 目前 Scope 支持传入多个 Scope 权限,用逗号分隔。 * * 有关哪些 OpenAPI 需要权限申请,请查看:http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI * 关于 Scope 概念及注意事项,请查看:http://open.weibo.com/wiki/Scope */ public static final String SCOPE = //这个是为了实现更多的功能所需要的权限。 "email,direct_messages_read,direct_messages_write," + "friendships_groups_read,friendships_groups_write,statuses_to_me_read," + "follow_app_official_microblog," + "invitation_write"; }
mSsoHandler = new SsoHandler(this, mAuthInfo); btn1.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { mSsoHandler.authorize(new AuthListener()); } }); class AuthListener implements WeiboAuthListener { @Override public void onComplete(Bundle values) { // 从 Bundle 中解析 Token mAccessToken = Oauth2AccessToken.parseAccessToken(values); if (mAccessToken.isSessionValid()) { // 显示 Token // 保存 Token 到 SharedPreferences } else { // 以下几种情况,您会收到 Code: // 1. 当您未在平台上注册的应用程序的包名与签名时; // 2. 当您注册的应用程序包名与签名不正确时; // 3. 当您在平台上注册的包名和签名与您当前测试的应用的包名和签名不匹配时。 String code = values.getString("code"); String message = "失败"; if (!TextUtils.isEmpty(code)) { message = message + "\nObtained the code: " + code; } Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG) .show(); } } @Override public void onCancel() { Toast.makeText(MainActivity.this, "onCancel", Toast.LENGTH_LONG) .show(); } @Override public void onWeiboException(WeiboException e) { Toast.makeText(MainActivity.this, "Auth exception : " + e.getMessage(), Toast.LENGTH_LONG) .show(); } }
至此: 你就在onComplete中拿到 Oauth2AccessToken mAccessToken; 开始实现分享
至此,你在实现分享之前需要注册你的应用(也就两句代码)即在oncreat中
mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this, Constants.APP_KEY); mWeiboShareAPI.registerApp();
btn2.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // 我btn2 事件调用的sendMultiMessage()函数。里边的String参数是我默认分享的内容。 sendMultiMessage("你好世界"); } });
private void sendMultiMessage(String message) { WeiboMultiMessage weiboMessage = new WeiboMultiMessage();// 初始化微博的分享消息 weiboMessage.textObject = getTextObj(); SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest(); request.transaction = String.valueOf(System.currentTimeMillis()); request.multiMessage = weiboMessage; AuthInfo authInfo = new AuthInfo(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE); Oauth2AccessToken accessToken = mAccessToken; String token = ""; if (accessToken != null) { token = accessToken.getToken(); } mWeiboShareAPI.sendRequest(this, request, authInfo, token, new WeiboAuthListener() {//这个接口是你分享成功或失败的回调 @Override public void onCancel() { } @Override public void onComplete(Bundle arg0) { } @Override public void onWeiboException(WeiboException bundle) { }); }你还需要在你的MainACtivity中实现OnActivityResult
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if (mSsoHandler != null) { mSsoHandler.authorizeCallBack(requestCode, resultCode, data); } }
<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.demo.WBShareActivity" android:configChanges="keyboardHidden|orientation" android:screenOrientation="portrait" > <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="com.sina.weibo.sdk.component.WeiboSdkBrowser" android:configChanges="keyboardHidden|orientation" android:exported="false" android:windowSoftInputMode="adjustResize" > </activity>
感谢。