zoukankan      html  css  js  c++  java
  • Android 使用新浪微博SSO授权

    新浪微博SSO授权,很早就做好了,只是一直没有时间整理博客,今天加班,晚上闲暇之时便想到整理一下。由于整个七月份很忙,加班很多。前段时间把腾讯微博的SSO认证整理好了。想在七月份翻篇之前再写点东西。好了,不多说废话了,下面就说说关于新浪微博SSO认证的内容。

    新浪微博比较简单,而且很方便使用。由于在腾讯微博中我有讲到SSO认证的过程,这里主要是看看新浪微博demo中的MainActivity,这个类中告诉我们如何进行新浪微博的授权,按照这个范例来做就可以的。下面是这个类的源码


    package com.weibo.sdk.android.demo;
    
    import java.text.SimpleDateFormat;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.weibo.sdk.android.Oauth2AccessToken;
    import com.weibo.sdk.android.Weibo;
    import com.weibo.sdk.android.WeiboAuthListener;
    import com.weibo.sdk.android.WeiboDialogError;
    import com.weibo.sdk.android.WeiboException;
    import com.weibo.sdk.android.keep.AccessTokenKeeper;
    import com.weibo.sdk.android.sso.SsoHandler;
    import com.weibo.sdk.android.util.Utility;
    /**
     * 
     * @author liyan (liyan9@staff.sina.com.cn) 这位是新浪SSO认证的开发者,很优秀的开发者
     */
    public class MainActivity extends Activity {
    
        private Weibo mWeibo;
        private static final String CONSUMER_KEY = "966056985";// 替换为开发者的appkey,例如"1646212860";
        private static final String REDIRECT_URL = "http://www.sina.com";
        private Button authBtn, apiBtn, ssoBtn, cancelBtn;
        private TextView mText;
        public static Oauth2AccessToken accessToken;
        public static final String TAG = "sinasdk";
        /**
         * SsoHandler 仅当sdk支持sso时有效,
         */
        SsoHandler mSsoHandler;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mWeibo = Weibo.getInstance(CONSUMER_KEY, REDIRECT_URL);
    
            authBtn = (Button) findViewById(R.id.auth);
            authBtn.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    mWeibo.authorize(MainActivity.this, new AuthDialogListener());
                }
            });
            ssoBtn = (Button) findViewById(R.id.sso);// 触发sso的按钮
            try {
                Class sso = Class.forName("com.weibo.sdk.android.sso.SsoHandler");
                ssoBtn.setVisibility(View.VISIBLE);
            } catch (ClassNotFoundException e) {
                Log.i(TAG, "com.weibo.sdk.android.sso.SsoHandler not found");
    
            }
            ssoBtn.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    /**
                     * 下面两个注释掉的代码,仅当sdk支持sso时有效,
                     */
    
                    mSsoHandler = new SsoHandler(MainActivity.this, mWeibo);
                    mSsoHandler.authorize(new AuthDialogListener());
                }
            });
            cancelBtn = (Button) findViewById(R.id.apiCancel);
            cancelBtn.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    AccessTokenKeeper.clear(MainActivity.this);
                    authBtn.setVisibility(View.VISIBLE);
                    ssoBtn.setVisibility(View.VISIBLE);
                    cancelBtn.setVisibility(View.INVISIBLE);
                    mText.setText("");
                }
            });
    
            mText = (TextView) findViewById(R.id.show);
            MainActivity.accessToken = AccessTokenKeeper.readAccessToken(this);
            if (MainActivity.accessToken.isSessionValid()) {
                Weibo.isWifi = Utility.isWifi(this);
                try {
                    Class sso = Class.forName("com.weibo.sdk.android.api.WeiboAPI");// 如果支持weiboapi的话,显示api功能演示入口按钮
                    apiBtn.setVisibility(View.VISIBLE);
                } catch (ClassNotFoundException e) {
                    // e.printStackTrace();
                    Log.i(TAG, "com.weibo.sdk.android.api.WeiboAPI not found");
    
                }
                authBtn.setVisibility(View.INVISIBLE);
                ssoBtn.setVisibility(View.INVISIBLE);
                cancelBtn.setVisibility(View.VISIBLE);
                String date = new java.text.SimpleDateFormat("yyyy/MM/dd hh:mm:ss")
                        .format(new java.util.Date(MainActivity.accessToken
                                .getExpiresTime()));
                mText.setText("access_token 仍在有效期内,无需再次登录: 
    access_token:"
                        + MainActivity.accessToken.getToken() + "
    有效期:" + date);
            } else {
                mText.setText("使用SSO登录前,请检查手机上是否已经安装新浪微博客户端,目前仅3.0.0及以上微博客户端版本支持SSO;如果未安装,将自动转为Oauth2.0进行认证");
            }
    
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.activity_main, menu);
            return true;
        }
    
        class AuthDialogListener implements WeiboAuthListener {
    
            @Override
            public void onComplete(Bundle values) {
                String token = values.getString("access_token");
                String expires_in = values.getString("expires_in");
                MainActivity.accessToken = new Oauth2AccessToken(token, expires_in);
                if (MainActivity.accessToken.isSessionValid()) {
                    String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
                            .format(new java.util.Date(MainActivity.accessToken
                                    .getExpiresTime()));
                    mText.setText("认证成功: 
     access_token: " + token + "
    "
                            + "expires_in: " + expires_in + "
    有效期:" + date);
                    try {
                        Class sso = Class
                                .forName("com.weibo.sdk.android.api.WeiboAPI");// 如果支持weiboapi的话,显示api功能演示入口按钮
                        apiBtn.setVisibility(View.VISIBLE);
                    } catch (ClassNotFoundException e) {
                        // e.printStackTrace();
                        Log.i(TAG, "com.weibo.sdk.android.api.WeiboAPI not found");
    
                    }
                    cancelBtn.setVisibility(View.VISIBLE);
                    AccessTokenKeeper.keepAccessToken(MainActivity.this,
                            accessToken);
                    Toast.makeText(MainActivity.this, "认证成功", Toast.LENGTH_SHORT)
                            .show();
                }
            }
    
            @Override
            public void onError(WeiboDialogError e) {
                Toast.makeText(getApplicationContext(),
                        "Auth error : " + e.getMessage(), Toast.LENGTH_LONG).show();
            }
    
            @Override
            public void onCancel() {
                Toast.makeText(getApplicationContext(), "Auth cancel",
                        Toast.LENGTH_LONG).show();
            }
    
            @Override
            public void onWeiboException(WeiboException e) {
                Toast.makeText(getApplicationContext(),
                        "Auth exception : " + e.getMessage(), Toast.LENGTH_LONG)
                        .show();
            }
    
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
            /**
             * 下面两个注释掉的代码,仅当sdk支持sso时有效,
             */
            if (mSsoHandler != null) {
                mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
            }
        }
    
    }
    


  • 相关阅读:
    vue 实例化定义路由模板
    MUI区域滚动,软键盘挡住input
    javaScript使用navigator.userAgent.toLowerCase()判断移动端类型
    vue-cli启动本地服务,局域网下通过ip访问不到的原因
    vue 实例化定义路由
    如何在同一个Excel里,对两个很相似的工作簿比对出不同之处
    常见贴片电容电阻封装及功率
    集成运放输入电压范围指标参数Uicmax,Uidmax
    复合管等效管
    urlparse模块
  • 原文地址:https://www.cnblogs.com/riskyer/p/3220032.html
Copyright © 2011-2022 走看看