三方登录之新浪微博

1、 申请应用程序的APP_KEY

在这一步中,您需要在微博开放平台上,对您的应用进行注册,并获取APP_KEY,添加应用的授权回调页(Redirect URI)。

详情:移动客户端接入

2、注册应用程序的包名和签名

您需要在微博开放平台上注册应用程序的包名和签名后,才能正确进行授权。
请注意:包名和签名未注册,或者签名注册不正确,都会导致无法授权。
应用程序包名:指AndroidManifest.xml文件中,package标签所代表的内容。
应用程序签名:该签名是通过官方提供的签名工具生成的MD5值。

3、集成sdk

3.1、添加依赖:

implementation 'com.sina.weibo.sdk:core:4.4.3:openDefaultRelease@aar'

4、使用

4.1、替换成自己应用的 APP_KEY 等参数

鉴于目前有很多第三方开发直接拷贝并使用Demo中的Constants类,因此,有必要说明,第三方开发者需要将Constants类中的各种参数替换成自己应用的参数,请仔细阅读代码注释。

public interface Constants {
    /** 当前 DEMO 应用的 APP_KEY,第三方应用应该使用自己的 APP_KEY 替换该 APP_KEY */
    public static final String APP_KEY      = "2045436852";

    /** 
     * 当前 DEMO 应用的回调页,第三方应用可以使用自己的回调页。
     * 建议使用默认回调页:https://api.weibo.com/oauth2/default.html
     */
    public static final String REDIRECT_URL = "https://api.weibo.com/oauth2/default.html";

    /**
     * WeiboSDKDemo 应用对应的权限,第三方开发者一般不需要这么多,可直接设置成空即可。
     * 详情请查看 Demo 中对应的注释。
     */
    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";
}

4.2、初始化微博SDK

WbSdk.install(this,
                new AuthInfo(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE));

其中:APP_KEY、 REDIRECT_URL、 SCOPE需要替换成第三方应用申请的内容。

4.3、实现WbAuthListener接口,调用授权

public class Test1Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test1);


        WbSdk.install(this,
                new AuthInfo(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE));

        SsoHandler ssoHandler=new SsoHandler(this);
        ssoHandler.authorizeClientSso(new SelfWbAuthListener());
    }

    private class SelfWbAuthListener implements com.sina.weibo.sdk.auth.WbAuthListener {
        @Override
        public void onSuccess(final Oauth2AccessToken token) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    if (token.isSessionValid()) {
                        // save Token to SharedPreferences
                        Toast.makeText(Test1Activity.this,
                                "授权成功", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }

        @Override
        public void cancel() {
            Toast.makeText(Test1Activity.this, "取消授权", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onFailure(WbConnectErrorMessage errorMessage) {
            Toast.makeText(Test1Activity.this, errorMessage.getErrorMessage(), Toast.LENGTH_LONG).show();
        }
    }
}

4.3.1、Web 授权,直接调用以下函数:

mSsoHandler = new SsoHandler(WBAuthActivity.this);
mSsoHandler.authorizeWeb(new WbAuthListener());

4.3.2、SSO授权,需要调用以下函数:

mSsoHandler = new SsoHandler(WBAuthActivity.this);
mSsoHandler. authorizeClientSso(new WbAuthListener());

4.3.3、all In one方式授权,需要调用以下函数:

mSsoHandler = new SsoHandler(WBAuthActivity.this);
mSsoHandler. authorize(new WbAuthListener());

注:此种授权方式会根据手机是否安装微博客户端来决定使用sso授权还是网页授权,如果安装有微博客户端 则调用微博客户端授权,否则调用Web页面方式授权 参见pdf文档说明 *

以上三种授权需要在Activity的onActivityResult函数中,调用以下方法:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (mSsoHandler != null) {
        mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
    }
}

如果使用的fragment,同样也要调用onActivityResult()。

onActivityResult()的回调很重要,不回调的话会报错。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章