zoukankan      html  css  js  c++  java
  • 新浪微博授权 分享

    微博官方demo:http://pan.baidu.com/s/1eQIhjqy

    1.需要回调的activity上加接收器

    <activity
    android:name="com.qingbai.mengpai.ui.ShareActivity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
    <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
    <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    </activity>

    2.加入权限,与版本号

    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />
      <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" />
    3.测试时,可以使用微博测试账号的KEY和包名
    APP_KEY= "2045436852";
    包名=com.sina.weibo.sdk.demo
    3.下载debug.keystore 替换 ADT原有的那个文件
    http://pan.baidu.com/s/1gdCF3wB
    5.导入jar包:
    http://pan.baidu.com/s/1jGKGPIA
    4.贴代码:
    package com.qingbai.mengpai.share;
    
    import java.text.SimpleDateFormat;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.drawable.BitmapDrawable;
    import android.os.Bundle;
    import android.support.v4.app.FragmentActivity;
    import android.text.TextUtils;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Toast;
    
    import com.sina.weibo.sdk.constant.WBConstants;
    import com.sina.weibo.sdk.demo.R;
    import com.qingbai.mengpai.tool.MyLog;
    import com.qingbai.mengpai.ui.BaseFragmentActivity;
    import com.sina.weibo.sdk.api.ImageObject;
    import com.sina.weibo.sdk.api.MusicObject;
    import com.sina.weibo.sdk.api.TextObject;
    import com.sina.weibo.sdk.api.VideoObject;
    import com.sina.weibo.sdk.api.VoiceObject;
    import com.sina.weibo.sdk.api.WebpageObject;
    import com.sina.weibo.sdk.api.WeiboMessage;
    import com.sina.weibo.sdk.api.WeiboMultiMessage;
    import com.sina.weibo.sdk.api.share.BaseResponse;
    import com.sina.weibo.sdk.api.share.IWeiboDownloadListener;
    import com.sina.weibo.sdk.api.share.IWeiboHandler;
    import com.sina.weibo.sdk.api.share.IWeiboShareAPI;
    import com.sina.weibo.sdk.api.share.SendMessageToWeiboRequest;
    import com.sina.weibo.sdk.api.share.SendMultiMessageToWeiboRequest;
    import com.sina.weibo.sdk.api.share.WeiboShareSDK;
    import com.sina.weibo.sdk.auth.Oauth2AccessToken;
    import com.sina.weibo.sdk.auth.WeiboAuth;
    import com.sina.weibo.sdk.auth.WeiboAuthListener;
    import com.sina.weibo.sdk.auth.sso.SsoHandler;
    import com.sina.weibo.sdk.exception.WeiboException;
    import com.sina.weibo.sdk.exception.WeiboShareException;
    import com.sina.weibo.sdk.utils.Utility;
    
    public class SinaShare extends Activity implements IWeiboHandler.Response{
    	
        /** 当前 DEMO 应用的 APP_KEY,第三方应用应该使用自己的 APP_KEY 替换该 APP_KEY */
        public  final String APP_KEY= "2045436852";//994010941
      //  public  final String REDIRECT_URL = "http://api.weibo.com/oauth2/default.html";
        public static final String REDIRECT_URL = "http://www.sina.com";
        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";
        
        private SsoHandler mSsoHandler;
        /** 封装了 "access_token","expires_in","refresh_token",并提供了他们的管理功能  */
        private Oauth2AccessToken mAccessToken;
    
        //分享
        /** 微博微博分享接口实例 */
        private IWeiboShareAPI  mWeiboShareAPI = null;
        String title="分享标题";
        String description="分享描述";
        String actionUrl="http://www.baidu.com";//分享链接
        String defaultText="Webpage 默认文案";//默认文本
        String dataUrl="www.weibo.com";//视频链接地址
        String dataHdUrl="www.weibo.com";//视频高清链接地址
        Bitmap shareImage=null;
        @Override
    	public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.sina_share);
            shareImage=((BitmapDrawable)getResources().getDrawable(R.drawable.logo)).getBitmap();
            weiboAuth();
        }
    //授权开始//////////////////////////////////////////////////////////////////////////////////////////////////   
        /**
         * 微博授权认证
         */
        public void weiboAuth(){
        	
        	WeiboAuth   mWeiboAuth=new WeiboAuth(SinaShare.this, APP_KEY, REDIRECT_URL, SCOPE);
            mSsoHandler = new SsoHandler(SinaShare.this, mWeiboAuth);
            mSsoHandler.authorize(new AuthListener());
            /*mWeiboAuth.anthorize(new AuthListener());*/
        }
        /**
         * 当 SSO 授权 Activity 退出时,该函数被调用。
         * 
         * @see {@link Activity#onActivityResult}
         */
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            
            // SSO 授权回调
            // 重要:发起 SSO 登陆的 Activity 必须重写 onActivityResult
            if (mSsoHandler != null) {
                mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
            }
        }
        /**
         * 微博认证授权回调类。
         * 1. SSO 授权时,需要在 {@link #onActivityResult} 中调用 {@link SsoHandler#authorizeCallBack} 后,
         *    该回调才会被执行。
         * 2. 非 SSO 授权时,当授权结束后,该回调就会被执行。
         * 当授权成功后,请保存该 access_token、expires_in、uid 等信息到 SharedPreferences 中。
         */
        class AuthListener implements WeiboAuthListener {
            
            @Override
            public void onComplete(Bundle values) {
                // 从 Bundle 中解析 Token
                mAccessToken = Oauth2AccessToken.parseAccessToken(values);
                if (mAccessToken.isSessionValid()) {
                    // 显示 Token
                    updateTokenView(false);
                    
                    // 保存 Token 到 SharedPreferences
                    AccessTokenKeeper.writeAccessToken(SinaShare.this, mAccessToken);
                    Toast.makeText(SinaShare.this, 
                            R.string.weibosdk_demo_toast_auth_success, Toast.LENGTH_SHORT).show();
                } else {
                    // 当您注册的应用程序签名不正确时,就会收到 Code,请确保签名正确
                    String code = values.getString("code");
                    String message = getString(R.string.weibosdk_demo_toast_auth_failed);
                    if (!TextUtils.isEmpty(code)) {
                        message = message + "
    Obtained the code: " + code;
                    }
                    Toast.makeText(SinaShare.this, message, Toast.LENGTH_LONG).show();
                }
            }
    
            @Override
            public void onCancel() {
                Toast.makeText(SinaShare.this, "cancel", Toast.LENGTH_LONG).show();
            }
            
            @Override
            public void onWeiboException(WeiboException e) {
                Toast.makeText(SinaShare.this, "Auth exception : " + e.getMessage(), Toast.LENGTH_LONG).show();
            }
        }
        /**
         * 显示当前 Token 信息。
         * 
         * @param hasExisted 配置文件中是否已存在 token 信息并且合法
         */
        private void updateTokenView(boolean hasExisted) {
            String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new java.util.Date(mAccessToken.getExpiresTime()));
            String format = "Token:%1$s 
    有效期:%2$s";
           MyLog.toLog(String.format(format, mAccessToken.getToken(), date));
            
            String message = String.format(format, mAccessToken.getToken(), date);
            if (hasExisted) {
                message = "Token 仍在有效期内,无需再次登录。" + "
    " + message;
            }
            MyLog.toLog(message);
        }
        ////////////////////////////////////////分享开始///////////////////////////////////////
        /**
         * 一键分享
         */
        public void myclick(View v){
            if(checkVersion()){
                try {
                    // 检查微博客户端环境是否正常,如果未安装微博,弹出对话框询问用户下载微博客户端
                    if (mWeiboShareAPI.checkEnvironment(true)) {
                        
                        // 注册第三方应用 到微博客户端中,注册成功后该应用将显示在微博的应用列表中。
                        // 但该附件栏集成分享权限需要合作申请,详情请查看 Demo 提示
                        mWeiboShareAPI.registerApp();
                        
                        sendMessage(false, false, true,false,  false, false);
                    }
                } catch (WeiboShareException e) {
                    e.printStackTrace();
                    Toast.makeText(SinaShare.this, e.getMessage(), Toast.LENGTH_LONG).show();
                }
            }
        }
        
        /**
         * 是否有安装微博客户端
         */
        public Boolean checkVersion(){
            // 创建微博分享接口实例
            mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this, APP_KEY); 
            // 如果未安装微博客户端,设置下载微博对应的回调
            if (!mWeiboShareAPI.isWeiboAppInstalled()) {
                mWeiboShareAPI.registerWeiboDownloadListener(new IWeiboDownloadListener() {
                    @Override
                    public void onCancel() {
                        Toast.makeText(SinaShare.this, "取消下载微博客户端",  Toast.LENGTH_SHORT).show();
                    }
                });
                return false;
            }
            return true;
        }
        
        @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) {
            switch (baseResp.errCode) {
            case WBConstants.ErrorCode.ERR_OK:
                Toast.makeText(this, "分享成功", Toast.LENGTH_LONG).show();
                break;
            case WBConstants.ErrorCode.ERR_CANCEL:
                Toast.makeText(this, "分享取消", Toast.LENGTH_LONG).show();
                break;
            case WBConstants.ErrorCode.ERR_FAIL:
                Toast.makeText(this, "分享失败" + "Error Message: " + baseResp.errMsg, Toast.LENGTH_LONG).show();
                break;
            }
        }
        /**
         * 第三方应用发送请求消息到微博,唤起微博分享界面。
         * @see {@link #sendMultiMessage} 或者 {@link #sendSingleMessage}
         */
        private void sendMessage(boolean hasText, boolean hasImage, boolean hasWebpage, boolean hasMusic, boolean hasVideo, boolean hasVoice) {
            
            if (mWeiboShareAPI.isWeiboAppSupportAPI()) {
                int supportApi = mWeiboShareAPI.getWeiboAppSupportAPI();
                if (supportApi >= 10351 /*ApiUtils.BUILD_INT_VER_2_2*/) {
                    sendMultiMessage(hasText, hasImage, hasWebpage, hasMusic, hasVideo, hasVoice);
                } else {
                    sendSingleMessage(hasText, hasImage, hasWebpage, hasMusic, hasVideo/*, hasVoice*/);
                }
            } else {
                Toast.makeText(this, "微博客户端不支持,请升级版本", Toast.LENGTH_SHORT).show();
            }
        }
        /**
         * 第三方应用发送请求消息到微博,唤起微博分享界面。
         * 注意:当 {@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(request);
        }
        /**
         * 第三方应用发送请求消息到微博,唤起微博分享界面。
         * 当{@link IWeiboShareAPI#getWeiboAppSupportAPI()} < 10351 时,只支持分享单条消息,即
         * 文本、图片、网页、音乐、视频中的一种,不支持Voice消息。
         * 
         * @param hasText    分享的内容是否有文本
         * @param hasImage   分享的内容是否有图片
         * @param hasWebpage 分享的内容是否有网页
         * @param hasMusic   分享的内容是否有音乐
         * @param hasVideo   分享的内容是否有视频
         */
        private void sendSingleMessage(boolean hasText, boolean hasImage, boolean hasWebpage,
                boolean hasMusic, boolean hasVideo/*, boolean hasVoice*/) {
            
            // 1. 初始化微博的分享消息
            // 用户可以分享文本、图片、网页、音乐、视频中的一种
            WeiboMessage weiboMessage = new WeiboMessage();
            if (hasText) {
                weiboMessage.mediaObject = getTextObj();
            }
            if (hasImage) {
                weiboMessage.mediaObject = getImageObj();
            }
            if (hasWebpage) {
                weiboMessage.mediaObject = getWebpageObj();
            }
            if (hasMusic) {
                weiboMessage.mediaObject = getMusicObj();
            }
            if (hasVideo) {
                weiboMessage.mediaObject = getVideoObj();
            }
            /*if (hasVoice) {
                weiboMessage.mediaObject = getVoiceObj();
            }*/
            
            // 2. 初始化从第三方到微博的消息请求
            SendMessageToWeiboRequest request = new SendMessageToWeiboRequest();
            // 用transaction唯一标识一个请求
            request.transaction = String.valueOf(System.currentTimeMillis());
            request.message = weiboMessage;
            
            // 3. 发送请求消息到微博,唤起微博分享界面
            mWeiboShareAPI.sendRequest(request);
        }
        /**
         * 创建文本消息对象。
         * 
         * @return 文本消息对象。
         */
        private TextObject getTextObj() {
            TextObject textObject = new TextObject();
            String  text = String.format("我正在使用微博客户端发博器分享文字", "【%1$s】(分享自 菜菜一号 %2$s)", 
            		"https://github.com/mobileresearch/weibo_android_sdk/blob/master/WeiboSDKDemo.apk");
            textObject.text =text;
            return textObject;
        }
    
        /**
         * 创建图片消息对象。
         * 
         * @return 图片消息对象。
         */
        private ImageObject getImageObj() {
            ImageObject imageObject = new ImageObject();
            imageObject.setImageObject(shareImage);
            return imageObject;
        }
    
        /**
         * 创建多媒体(网页)消息对象。
         * 
         * @return 多媒体(网页)消息对象。
         */
        private WebpageObject getWebpageObj() {
            WebpageObject mediaObject = new WebpageObject();
            mediaObject.identify = Utility.generateGUID();
            mediaObject.title =title;
            mediaObject.description = description;
            
            // 设置 Bitmap 类型的图片到视频对象里
            
            mediaObject.setThumbImage(shareImage);
            mediaObject.actionUrl = actionUrl;
            mediaObject.defaultText = defaultText;
            return mediaObject;
        }
    
        /**
         * 创建多媒体(音乐)消息对象。
         * 
         * @return 多媒体(音乐)消息对象。
         */
        private MusicObject getMusicObj() {
            // 创建媒体消息
            MusicObject musicObject = new MusicObject();
            musicObject.identify = Utility.generateGUID();
            musicObject.title =title;
            musicObject.description =description;
            
            // 设置 Bitmap 类型的图片到视频对象里
            musicObject.setThumbImage(shareImage);
            musicObject.actionUrl = actionUrl;
            musicObject.dataUrl = dataUrl;
            musicObject.dataHdUrl =dataHdUrl;
            musicObject.duration = 10;
            musicObject.defaultText = defaultText;
            return musicObject;
        }
        /**
         * 创建多媒体(视频)消息对象。
         * 
         * @return 多媒体(视频)消息对象。
         */
        private VideoObject getVideoObj() {
            // 创建媒体消息
            VideoObject videoObject = new VideoObject();
            videoObject.identify = Utility.generateGUID();
            videoObject.title =title;
            videoObject.description =description;
            
            // 设置 Bitmap 类型的图片到视频对象里
            videoObject.setThumbImage(shareImage);
            videoObject.actionUrl =actionUrl;
            videoObject.dataUrl = dataUrl;
            videoObject.dataHdUrl = dataHdUrl;
            videoObject.duration = 10;
            videoObject.defaultText = defaultText;
            return videoObject;
        }
    
        /**
         * 创建多媒体(音频)消息对象。
         * 
         * @return 多媒体(音乐)消息对象。
         */
        private VoiceObject getVoiceObj() {
            // 创建媒体消息
            VoiceObject voiceObject = new VoiceObject();
            voiceObject.identify = Utility.generateGUID();
            voiceObject.title =title;
            voiceObject.description = description;
            
            // 设置 Bitmap 类型的图片到视频对象里
            voiceObject.setThumbImage(shareImage);
            voiceObject.actionUrl = actionUrl;
            voiceObject.dataUrl = dataUrl;
            voiceObject.dataHdUrl =dataHdUrl;
            voiceObject.duration = 10;
            voiceObject.defaultText =defaultText;
            return voiceObject;
        }
    }
    

      

     
  • 相关阅读:
    Python第三方库SnowNLP(Simplified Chinese Text Processing)快速入门与进阶
    Python第三方库SnowNLP(Simplified Chinese Text Processing)快速入门与进阶
    用python玩微信(聊天机器人,好友信息统计)
    BIOS与UEFI
    MBR&/BOOT&GRUB
    Hard Disk Driver(GPT)
    Hard Disk Drive(MBR)
    反Secure Boot垄断:兼谈如何在Windows 8电脑上安装Linux
    硬盘分区基本知识
    计算机启动过程
  • 原文地址:https://www.cnblogs.com/clarence/p/3929571.html
Copyright © 2011-2022 走看看