Android 开源社会化登录 SDK,支持微信,微博, QQ

张海龙 发布于 2015/11/23 10:05
阅读 274
收藏 1

这半年做的项目被大老板 ban 掉了,略伤感。。。

这几天整理了一下项目中负责的社会化登录和分享模块, SDK 集成本身是很简单的事情,但是三家平台的接口差异很大,如果只见简单的把代码垒在一起,几乎不可以复用,扩展性和可维护性为零。所以简单抽象了一下接口,提供 aar 库。

其实,像友盟, ShareSDK 等平台也提供类似的 SDK ,之所以造轮子是因为这些平台的 SDK 内部肯定会带有数据统计功能,不想给他们共享数据。

当前已经实现社会化登录功能,分享功能 ing

项目地址: https://github.com/ElbbbirdStudio/ESSocialSDK

ESSocialSDK

社交登录授权,分享 SDK

支持微信、微博、 QQ 登录授权

微信好友、微信朋友圈、微博、 QQ 好友、 QQ 空间分享

Gradle

compile 'com.elbbbird.android:socialsdk:0.1.0@aar'

使用指南

Debug 模式

SocialSDK.setDebugMode(true); //默认 false

平台 SSO 授权功能

ISocialOauthCallback授权回调接口

ISocialOauthCallback callback = new ISocialOauthCallback() { @Override public void onGetTokenSuccess(SocialToken token) { //获取 token 成功 Log.i(TAG, "onGetTokenSuccess" + token.toString()); } @Override public void onGetUserSuccess(SocialUser user) { //获取用户信息成功 Log.i(TAG, "onGetUserSuccess# " + user.toString()); } @Override public void onFailure(Exception e) { //失败 Log.i(TAG, "onFailure# " + e.toString()); } @Override public void onCancel() { //取消 Log.i(TAG, "onCancel#"); } };

微博授权

  • 配置微博后台回调地址
    SDK 的默认回调地址为http://www.sina.com,需要在微博后台配置,否则会提示回调地址错误。
    如果在SocialSDK.initWeibo()方法自定义了回调地址,需要在后台配置为相应地址。
  • oauth
SocialSDK.initWeibo("app_key"); SocialSDK.oauthWeibo(context, callback);
  • onActivityResult
SocialSDK.oauthWeiboCallback(context, requestCode, resultCode, data);
  • revoke
SocialSDK.revokeWeibo(context);

微信授权

  • WXEntryActivity
    创建包名:package_name.wxapi
    在该包名下创建类WXEntryActivity继承自WXCallbackActivity
package com.encore.actionnow.wxapi; public class WXEntryActivity extends WXCallbackActivity { }
  • AndroidManifest.xml
<activity android:name=".wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" />
  • oauth
SocialSDK.initWeChat("app_id", "app_secret"); SocialSDK.oauthWeChat(context, callback);
  • revoke
SocialSDK.revokeWeChat(context);

QQ 授权

  • AndroidManifest.xml
<activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="tencentXXXXXXXXX" /> </intent-filter> </activity>

以上配置中的XXXXXXXXX换成 app_id.

  • oauth
SocialSDK.initQQ(app_id); SocialSDK.oauthQQ(context, callback);
  • onActivityResult
if (requestCode == Constants.REQUEST_LOGIN || requestCode == Constants.REQUEST_APPBAR) { SocialSDK.oauthQQCallback(requestCode, resultCode, data); }
  • revoke
SocialSDK.revokeQQ(context);

SDK 默认授权界面,展示全平台授权接口

  • 配置微博后台回调地址

    SDK 的默认回调地址为http://www.sina.com,需要在微博后台配置,否则会提示回调地址错误。

    如果在SocialSDK.init()方法自定义了回调地址,需要在后台配置为相应地址。

  • WXEntryActivity

    创建包名:package_name.wxapi

    在该包名下创建类WXEntryActivity继承自WXCallbackActivity

package com.encore.actionnow.wxapi; public class WXEntryActivity extends WXCallbackActivity { }
  • AndroidManifest.xml
<activity android:name=".wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar" /> <activity android:name="com.tencent.tauth.AuthActivity" android:launchMode="singleTask" android:noHistory="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="tencentXXXXXXXXX" /> </intent-filter> </activity>

以上配置中的XXXXXXXXX换成 app_id.

  • oauth
SocialSDK.init("wechat_app_id", "wechat_app_secret", "weibo_app_id", "qq_app_id"); SocialSDK.oauth(context);
  • 授权结果回调
    SDK 使用了Otto作为事件库,用以组件通信。(其实我是不想写 startActivityForResult ...)
    在调用SocialSDK.oauth()接口Activity的onCreate()方法内添加
BusProvider.getInstance().register(this);

在该Activity的onDestroy()方法添加

@Override protected void onDestroy() { BusProvider.getInstance().unregister(this); super.onDestroy(); }

添加回调接口

@Subscribe public void onOauthResult(BusEvent event) { switch (event.getType()) { case BusEvent.TYPE_GET_TOKEN: SocialToken token = event.getToken(); Log.i(TAG, "onOauthResult#BusEvent.TYPE_GET_TOKEN " + token.toString()); break; case BusEvent.TYPE_GET_USER: SocialUser user = event.getUser(); Log.i(TAG, "onOauthResult#BusEvent.TYPE_GET_USER " + user.toString()); break; case BusEvent.TYPE_FAILURE: Exception e = event.getException(); Log.i(TAG, "onOauthResult#BusEvent.TYPE_FAILURE " + e.toString()); break; case BusEvent.TYPE_CANCEL: Log.i(TAG, "onOauthResult#BusEvent.TYPE_CANCEL"); break; } }
  • revoke
SocialSDK.revoke(context);

FAQ

  • 关于三个平台的账号

    微博应用程序注册完成后,需要在后台配置测试账号,包名,签名信息,然后开始测试;

    微信应用程序注册后,需要配置包名和签名,并提交审核通过,可以获得分享权限。 SSO 登录权限需要开发者认证。(保护费不到位,测试都不能做)

    QQ 需要在后台配置测试账号才能 SSO 登录。

  • 是否需要配置权限?

    SDK 已经在 aar 中添加三个平台需要的权限,以下

<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
加载中
返回顶部
顶部