V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hailong0707
V2EX  ›  程序员

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

  •  3
     
  •   hailong0707 · 2015-11-23 09:37:54 +08:00 · 4392 次点击
    这是一个创建于 3283 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    ESSocialSDK Build Status

    社交登录授权,分享 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 java SocialSDK.initWeibo("app_key"); SocialSDK.oauthWeibo(context, callback);
    • onActivityResult
      java
      SocialSDK.oauthWeiboCallback(context, requestCode, resultCode, data);

    • revoke
      java
      SocialSDK.revokeWeibo(context);

    微信授权

    • WXEntryActivity
      创建包名:package_name.wxapi
      在该包名下创建类WXEntryActivity继承自WXCallbackActivity
    package com.encore.actionnow.wxapi;
    public class WXEntryActivity extends WXCallbackActivity {
    
    }
    
    • AndroidManifest.xml
      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
      java
      SocialSDK.initWeChat("app_id", "app_secret");
      SocialSDK.oauthWeChat(context, callback);

    • revoke
      java
      SocialSDK.revokeWeChat(context);

    QQ 授权

    • AndroidManifest.xml
      ```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
      java
      SocialSDK.initQQ(app_id);
      SocialSDK.oauthQQ(context, callback);

    • onActivityResult
      java
      if (requestCode == Constants.REQUEST_LOGIN || requestCode == Constants.REQUEST_APPBAR) {
      SocialSDK.oauthQQCallback(requestCode, resultCode, data);
      }

    • revoke
      java
      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

      ```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
      java
      SocialSDK.init("wechat_app_id", "wechat_app_secret", "weibo_app_id", "qq_app_id");
      SocialSDK.oauth(context);

    • 授权结果回调

      SDK 使用了Otto作为事件库,用以组件通信。(其实我是不想写 startActivityForResult ...)

      在调用SocialSDK.oauth()接口ActivityonCreate()方法内添加

      java
      BusProvider.getInstance().register(this);

      在该ActivityonDestroy()方法添加

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

      添加回调接口

      java
      @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
      java
      SocialSDK.revoke(context);

    FAQ

    • 关于三个平台的账号

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

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

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

    • 是否需要配置权限?

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

      xml
      <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" />

    11 条回复    2015-11-24 10:15:28 +08:00
    nuist
        1
    nuist  
       2015-11-23 09:51:09 +08:00   ❤️ 1
    赞, 已 Star !
    ldehai
        2
    ldehai  
       2015-11-23 11:31:51 +08:00
    先赞再看,现在还没有好用的分享库
    liuzuo
        3
    liuzuo  
       2015-11-23 11:42:02 +08:00 via Android
    赞,好东西!
    njuptjsy
        4
    njuptjsy  
       2015-11-23 11:52:51 +08:00 via Android
    赞一个
    hqs123
        5
    hqs123  
       2015-11-23 13:25:48 +08:00
    技术好文,多谢分享...
    endoffight
        6
    endoffight  
       2015-11-23 13:32:45 +08:00
    手动点赞!
    xiwenyi
        7
    xiwenyi  
       2015-11-23 13:35:27 +08:00
    点赞
    bluefalconjun
        8
    bluefalconjun  
       2015-11-23 13:42:34 +08:00
    帅!!
    a6377508
        9
    a6377508  
       2015-11-23 13:47:59 +08:00
    点赞
    phttc
        10
    phttc  
       2015-11-24 09:02:04 +08:00
    帅气,最近正好想要去接各个渠道 sdk ,一个个看下来头都大了。看到这篇文章简直是救星啊。
    hailong0707
        11
    hailong0707  
    OP
       2015-11-24 10:15:28 +08:00
    @phttc 当前我一不小心不 jcenter 的源删了,直接饮用 aar 可能出问题,正在申请重新上线,如果有问题邮件我 [email protected]
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5622 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 08:41 · PVG 16:41 · LAX 00:41 · JFK 03:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.