社會化登錄分享-Android SDK的二次封裝和使用

本系列文章將第三方的登錄分享功能進行二次封裝,統一接口調用,簡化了接不同平臺登錄分享的步驟。

0 系列文章

系列一 Android SDK的二次封裝和使用
系列二 源碼解析
系列三 微信SDK接入
系列四 QQ SDK接入
系列五 新浪微博 SDK接入

1 前言

現在有市場上又好幾家都做了社會化分享組件,比如ShareSDK,Umeng等。唯一的缺點就是,必須得注冊相應服務平臺的賬號。無法單純使用客戶端SDK。

本系列文章即開源實現了社會化的登錄分享,統一對外接口。會分別從如何使用、源碼解析、各平臺接入進行解讀。

2 Github地址

先上開源代碼和封裝好的SDK。

https://github.com/tsy12321/SocialSDKAndroid

歡迎在issue里提功能需求和建議!

3 目錄介紹

如圖:

目錄結構

采用了jar包的方式封裝sdk,需要使用時可以引入social_sdk.jar再搭配需要的平臺sdk使用.
這種方式可以減少sdk的體積,需要什么平臺就引入哪個平臺.更為合理.

目錄結構:

  • app/ Demo代碼
  • social_sdk/ sdk的開發源碼module 開發完成后用gradle中makejar打成jar包
  • social_sdk_vxxx.jar sdk的jar包 直接使用.搭配所需的平臺sdk包.
  • weixin_sdk/ 微信sdk
  • qq_sdk/ qq sdk
  • sina_weibo_sdk/ 新浪微博 sdk

4 Demo介紹

替換Demo中的MainActivity中的qq appid、wx appid、weibo appkey為自己的

public class MainActivity extends AppCompatActivity implements IWeiboHandler.Response{

    ...

    private static final String WX_APPID = "your wx appid";    //申請的wx appid
    private static final String QQ_APPID = "your qq appid";    //申請的qq appid
    private static final String SINA_WB_APPKEY = "your sina wb appkey";       //申請的新浪微博 appkey

    ...
}

替換AndroidManifest中的qq appid為自己的

<!--qq-->
<activity
    android:name="com.tencent.tauth.AuthActivity"
    android:noHistory="true"
    android:launchMode="singleTask" >
    <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="tencent1111111" /> <!--1111111改為你的qq appid-->
    </intent-filter>
</activity>

替換builde.gradle文件中的簽名為自己的app簽名。

修改完上面3個地方后即可跑通Demo。如下

Demo

5 功能介紹

該SDK主要集成了授權登錄和分享的功能

5.1 授權登錄

  1. 微信授權登錄
  2. QQ授權登錄
  3. 新浪微博授權登錄

5.2 分享

5.2.1 分享媒介

  1. 文字
  2. 圖片
  3. 音樂
  4. 視頻
  5. 網頁

5.2.2 分享平臺

  1. 微信會話分享
  2. 微信朋友圈分享
  3. QQ分享
  4. QQ空間分享
  5. 新浪微博分享

6 開發說明

6.1 準備

將social_sdk.jar和需要的平臺sdk放入項目中引用.

AndroidManifest加上以下基本的權限(之后各個平臺會注冊一些不同的信息后面會說明)

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

6.2 配置平臺信息

在項目入口(或者在調用前)需要配置平臺的信息,配置一次即可.

PlatformConfig.setWeixin(WX_APPID);
PlatformConfig.setQQ(QQ_APPID);
PlatformConfig.setSinaWB(SINA_WB_APPKEY);

6.3 接口使用說明

調用方式使用api調用登錄或者分享接口,在參數中區別平臺,實現回調接收成功 取消或者失敗的結果.

示例如下:(某些平臺會有一些特殊處理后面會在平臺中說明)

初始化api:

SocialApi mSocialApi = SocialApi.get(getApplicationContext());

登錄授權:

mSocialApi.doOauthVerify(this, PlatformType.WEIXIN, new AuthListener() {
    @Override
    public void onComplete(PlatformType platform_type, Map<String, String> map) {
        Log.i("tsy", "oncomplete:" + map);
    }

    @Override
    public void onError(PlatformType platform_type, String err_msg) {
        Log.i("tsy", "onError:" + err_msg);
    }

    @Override
    public void onCancel(PlatformType platform_type) {
        Log.i("tsy", "onCancel");
    }
});

分享:


//分享媒介 后面有詳細介紹
ShareWebMedia shareMedia = new ShareWebMedia();
shareMedia.setTitle("分享網頁測試");
shareMedia.setDescription("分享網頁測試");
shareMedia.setWebPageUrl("http://www.baidu.com");
shareMedia.setThumb(BitmapUtils.readBitMap(getApplicationContext(), R.mipmap.ic_launcher));

mSocialApi.doShare(this, PlatformType.WEIXIN, shareMedia, new ShareListener() {
    @Override
    public void onComplete(PlatformType platform_type) {
        Log.i("tsy", "share onComplete");
    }

    @Override
    public void onError(PlatformType platform_type, String err_msg) {
        Log.i("tsy", "share onError:" + err_msg);
    }

    @Override
    public void onCancel(PlatformType platform_type) {
        Log.i("tsy", "share onCancel");
    }
});

6.4 分享媒介

現在集成了文字分享,圖片分享,音樂分享,視頻分享,網頁分享5種分享媒介.不同的平臺可能只有其中某幾種.

6.4.1 文字分享

ShareTextMedia shareMedia = new ShareTextMedia();
shareMedia.setText("分享文字測試");

6.4.2 圖片分享

ShareImageMedia shareMedia = new ShareImageMedia();
shareMedia.setImage(BitmapUtils.readBitMap(getApplicationContext(), R.mipmap.ic_launcher));

6.4.3 音樂分享

ShareMusicMedia shareMedia = new ShareMusicMedia();
shareMedia.setTitle("分享音樂測試");
shareMedia.setDescription("分享音樂測試");
shareMedia.setMusicUrl("http://idg-tangsiyuan.tunnel.nibaguai.com/splash/music.mp3");
shareMedia.setThumb(BitmapUtils.readBitMap(getApplicationContext(), R.mipmap.ic_launcher));

6.4.4 視頻分享

ShareVideoMedia shareMedia = new ShareVideoMedia();
shareMedia.setTitle("分享視頻測試");
shareMedia.setDescription("分享視頻測試");
shareMedia.setVideoUrl("http://idg-tangsiyuan.tunnel.nibaguai.com/splash/music.mp3");
shareMedia.setThumb(BitmapUtils.readBitMap(getApplicationContext(), R.mipmap.ic_launcher));

6.4.5 網頁分享

ShareWebMedia shareMedia = new ShareWebMedia();
shareMedia.setTitle("分享網頁測試");
shareMedia.setDescription("分享網頁測試");
shareMedia.setWebPageUrl("http://www.baidu.com");
shareMedia.setThumb(BitmapUtils.readBitMap(getApplicationContext(), R.mipmap.ic_launcher));

7 第三方平臺接入

7.1 微信

7.1.1 集成sdk

將目錄中的weixin_sdk_v3.1.1.jar放入項目.

7.1.2 配置

AndroidManifest中添加:

<activity
    android:name="com.tsy.sdk.social.weixin.WXCallbackActivity"
    android:configChanges="orientation|keyboardHidden|navigation|screenSize"
    android:exported="true"
    android:launchMode="singleTop"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity-alias
    android:name=".wxapi.WXEntryActivity"
    android:exported="true"
    android:targetActivity="com.tsy.sdk.social.weixin.WXCallbackActivity" />

7.1.3 常量定義

設置配置信息:

PlatformConfig.setWeixin(WX_APPID);

PlatformType:

微信:PlatformType.WEIXIN(可用于登錄和微信回話分享)

朋友圈:PlatformType.WEIXIN_CIRCLE(用于微信朋友圈分享)

7.1.4 注意

使用微信登錄分享需要簽名打包,并且簽名和包名要和微信平臺填入的信息一致。

7.2 QQ

7.2.1 集成sdk

將目錄中的qq_mta-sdk-1.6.2.jar和qq_sdk_v3.1.0.jar放入項目.

7.2.2 配置

AndroidManifest中添加:

<!--qq-->
<activity
    android:name="com.tencent.tauth.AuthActivity"
    android:noHistory="true"
    android:launchMode="singleTask" >
    <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="tencent你的appid" />
    </intent-filter>
</activity>
<activity
    android:name="com.tencent.connect.common.AssistActivity"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />

7.2.3 常量定義

設置配置信息:

PlatformConfig.setQQ(QQ_APPID);

PlatformType:

微信:PlatformType.QQ(可用于登錄和QQ分享)

朋友圈:PlatformType.QZONE(用于qq控件分享)

7.2.4 注意

使用QQ登錄需要簽名打包,并且簽名和包名要和QQ開放平臺填入的信息一致。

7.3 新浪微博

7.3.1 集成sdk

將目錄中的weiboSDKCore_3.1.4.jar放入項目.

將所有so文件統一放到項目的目錄app/jniLibs中(和libs同級), 然后在gradle中加上

android {

    ...

    //引入微博的所有so庫
    sourceSets {
        main {
            jniLibs.srcDirs = ['jniLibs']
        }
    }
}

7.3.2 配置

AndroidManifest中添加:

<activity
    android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
    android:configChanges="keyboardHidden|orientation"
    android:exported="false"
    android:windowSoftInputMode="adjustResize"></activity>

并且在發起分享的activity頁面的AndroidManifest頁面中加上

<activity android:name="com.tsy.girl.MainActivity">     <!--發起分享的頁面-->
    <intent-filter>
        <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

然后在發起分享的Activity中添加以下代碼.(假如是MainActivity)

實現IWeiboHandler.Response接口, 然后在實現的方法中寫:

@Override
public void onResponse(BaseResponse baseResponse) {
    ((SinaWBHandler)mSocialApi.getSSOHandler(PlatformType.SINA_WB)).onResponse(baseResponse);
}

實現onNewIntent和onActivityResult方法:

@Override
protected void onNewIntent(Intent intent) {
    ((SinaWBHandler)mSocialApi.getSSOHandler(PlatformType.SINA_WB)).onNewIntent(intent, this);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    mSocialApi.onActivityResult(requestCode, resultCode, data);
}

在onCreate中添加以下:

if (savedInstanceState != null) {
    ((SinaWBHandler)mSocialApi.getSSOHandler(PlatformType.SINA_WB)).onNewIntent(getIntent(), this);
}

然后正常發起授權或者分享代碼即可.

7.3.3 常量定義

設置配置信息:

PlatformConfig.setSinaWB(SINA_WB_APPKEY);

7.3.4 注意

使用新浪登錄分享需要簽名打包,并且簽名和包名要和新浪平臺填入的信息一致。

結尾

整個項目是一個可擴展的SDK,歡迎fork實現自己需要增加平臺的代碼,這個庫本身也會不斷添加平臺和功能點。本篇就醬紫了,下篇會有整個SDK的基本源碼解析。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容