zoukankan      html  css  js  c++  java
  • 新浪微博分享 小记!!!(尚未成功)

    最近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内自行查看,我这里只选择了重要的一些)

      

  • 相关阅读:
    阿里的面试官都喜欢问哪些问题?
    Spring AOP中的JDK和CGLib动态代理哪个效率更高?
    招聘季!送你21套经典面试题!助你一臂之力!
    Spring AOP中的JDK和CGLib动态代理哪个效率更高?
    为什么需要分布式配置中心?
    线上出故障了!我慌得一匹!教大家如何应对在线故障!
    阿里巴巴的26款超神Java开源项目!
    完了!生产事故!几百万消息在消息队列里积压了几个小时!
    十大经典排序算法(动图演示)
    用户画像学习笔记
  • 原文地址:https://www.cnblogs.com/fengfenghuifei/p/5941663.html
Copyright © 2011-2022 走看看