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

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

0 系列文章

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

1 前言

如今有市場上又好幾家都作了社會化分享組件,好比ShareSDK,Umeng等。惟一的缺點就是,必須得註冊相應服務平臺的帳號。沒法單純使用客戶端SDK。git

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

2 Github地址

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

github.com/tsy12321/So…bash

歡迎在issue裏提功能需求和建議!微信

3 目錄介紹

如圖:app

目錄結構
目錄結構

採用了jar包的方式封裝sdk,須要使用時能夠引入social_sdk.jar再搭配須要的平臺sdk使用.
這種方式能夠減小sdk的體積,須要什麼平臺就引入哪一個平臺.更爲合理.ide

目錄結構:post

  • 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
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的基本源碼解析。

相關文章
相關標籤/搜索