最近app要集成新浪的微博分享(首先吐槽下开发者注册之难,竟然还要身份证的正反面,我又不是开淘宝店!
还有他那个开发者登录系统反应之慢!好在我通过登录扫码自己的微博成功登陆上了开发者)
他分享的内容:文字+图片+(网页,视频,音频中的一种),当然也可以只要文字
我的app就是一个网页,所以分享的就是一个 文字+网页 即可,有没有图片,看心情
继承前你需要注册新浪微博开发者
注册好之后加入你的app应用,加入app应用需要包名和用微博md5签名工具生成的md5值
然后开始集成
先在AndroidManifest.xml中加入微博分享的action就是 在需要接收消息的 Activity(唤起微博主程序的类)里声 明对应的Action:ACTION_SDK_REQ_ACTIVITY,如下所示
下图是在WBShareActivity这个activity里分享微博
<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>
然后先进行注册
/** 微博分享的接口实例 */ private IWeiboShareAPI mWeiboShareAPI; mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this, Constants.APP_KEY);
mWeiboShareAPI.registerApp(); // 将应用注册到微博客户
之后创建分享内容
文字 图片 网页
/** * 创建文本消息对象。 * * @return 文本消息对象。 */ private TextObject getTextObj() { TextObject textObject = new TextObject(); textObject.text = getSharedText(); return textObject; } /** * 创建图片消息对象。 * * @return 图片消息对象。 */ private ImageObject getImageObj() { ImageObject imageObject = new ImageObject(); BitmapDrawable bitmapDrawable = (BitmapDrawable) mImageView.getDrawable(); //设置缩略图。 注意:最终压缩过的缩略图大小不得超过 32kb。 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_logo); imageObject.setImageObject(bitmap); return imageObject; } /** * 创建多媒体(网页)消息对象。 * * @return 多媒体(网页)消息对象。 */ private WebpageObject getWebpageObj() { WebpageObject mediaObject = new WebpageObject(); mediaObject.identify = Utility.generateGUID(); mediaObject.title = mShareWebPageView.getTitle(); mediaObject.description = mShareWebPageView.getShareDesc(); Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_logo); // 设置 Bitmap 类型的图片到视频对象里 设置缩略图。 注意:最终压缩过的缩略图大小不得超过 32kb。 mediaObject.setThumbImage(bitmap); mediaObject.actionUrl = mShareWebPageView.getShareUrl(); mediaObject.defaultText = "Webpage 默认文案"; return mediaObject; }
创建好之后开始通知微博发博器发微博
/** * 第三方应用发送请求消息到微博,唤起微博分享界面。 * 注意:当 {@link IWeiboShareAPI#getWeiboAppSupportAPI()} >= 10351 时,支持同时分享多条消息, * 同时可以分享文本、图片以及其它媒体资源(网页、音乐、视频、声音中的一种)。 * * @param hasText 分享的内容是否有文本 * @param hasImage 分享的内容是否有图片 * @param hasWebpage 分享的内容是否有网页 * @param hasMusic 分享的内容是否有音乐 * @param hasVideo 分享的内容是否有视频 * @param hasVoice 分享的内容是否有声音 */ private void sendMultiMessage(boolean hasText, boolean hasImage, boolean hasWebpage, boolean hasMusic, boolean hasVideo, boolean hasVoice) { // 1. 初始化微博的分享消息 WeiboMultiMessage weiboMessage = new WeiboMultiMessage(); if (hasText) { weiboMessage.textObject = getTextObj(); } if (hasImage) { weiboMessage.imageObject = getImageObj(); } // 用户可以分享其它媒体资源(网页、音乐、视频、声音中的一种)不要的删掉即可 if (hasWebpage) { weiboMessage.mediaObject = getWebpageObj(); } if (hasMusic) { weiboMessage.mediaObject = getMusicObj(); } if (hasVideo) { weiboMessage.mediaObject = getVideoObj(); } if (hasVoice) { weiboMessage.mediaObject = getVoiceObj(); } // 2. 初始化从第三方到微博的消息请求 SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest(); // 用transaction唯一标识一个请求 request.transaction = String.valueOf(System.currentTimeMillis()); request.multiMessage = weiboMessage; // 3. 发送请求消息到微博,唤起微博分享界面 mWeiboShareAPI.sendRequest(WBShareActivity.this, request); }
然后实现OnResponse接口,当微博分享完成后回到本app
/** * @see {@link Activity#onNewIntent} */ @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); // 从当前应用唤起微博并进行分享后,返回到当前应用时,需要在此处调用该函数 // 来接收微博客户端返回的数据;执行成功,返回 true,并调用 // {@link IWeiboHandler.Response#onResponse};失败返回 false,不调用上述回调 mWeiboShareAPI.handleWeiboResponse(intent, this); } /** * 接收微客户端博请求的数据。 * 当微博客户端唤起当前应用并进行分享时,该方法被调用。 * * @param baseRequest 微博请求数据对象 * @see {@link IWeiboShareAPI#handleWeiboRequest} */ @Override public void onResponse(BaseResponse baseResp) { if(baseResp!= null){ switch (baseResp.errCode) { case WBConstants.ErrorCode.ERR_OK: Toast.makeText(this, R.string.weibosdk_demo_toast_share_success, Toast.LENGTH_LONG).show(); break; case WBConstants.ErrorCode.ERR_CANCEL: Toast.makeText(this, R.string.weibosdk_demo_toast_share_canceled, Toast.LENGTH_LONG).show(); break; case WBConstants.ErrorCode.ERR_FAIL: Toast.makeText(this, getString(R.string.weibosdk_demo_toast_share_failed) + "Error Message: " + baseResp.errMsg, Toast.LENGTH_LONG).show(); break; } } }
(注:代码均来自微博SDK,版本3.1.4,详情请可以去sdk内自行查看,我这里只选择了重要的一些)