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

本系列文章將第三方的登錄分享功能進行二次封裝酵颁,統(tǒng)一接口調(diào)用再登,簡化了接不同平臺登錄分享的步驟拓售。

0 系列文章

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

1 前言

現(xiàn)在有市場上又好幾家都做了社會化分享組件凳怨,比如ShareSDK叉讥,Umeng等华临。唯一的缺點就是芯杀,必須得注冊相應(yīng)服務(wù)平臺的賬號。無法單純使用客戶端SDK雅潭。

本系列文章即開源實現(xiàn)了社會化的登錄分享揭厚,統(tǒng)一對外接口。會分別從如何使用扶供、源碼解析筛圆、各平臺接入進行解讀。

2 Github地址

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

https://github.com/tsy12321/SocialSDKAndroid

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

3 目錄介紹

如圖:

目錄結(jié)構(gòu)

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

目錄結(jié)構(gòu):

  • app/ Demo代碼
  • social_sdk/ sdk的開發(fā)源碼module 開發(fā)完成后用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主要集成了授權(quán)登錄和分享的功能

5.1 授權(quán)登錄

  1. 微信授權(quán)登錄
  2. QQ授權(quán)登錄
  3. 新浪微博授權(quán)登錄

5.2 分享

5.2.1 分享媒介

  1. 文字
  2. 圖片
  3. 音樂
  4. 視頻
  5. 網(wǎng)頁

5.2.2 分享平臺

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

6 開發(fā)說明

6.1 準(zhǔn)備

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

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

<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 配置平臺信息

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

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

6.3 接口使用說明

調(diào)用方式使用api調(diào)用登錄或者分享接口,在參數(shù)中區(qū)別平臺,實現(xiàn)回調(diào)接收成功 取消或者失敗的結(jié)果.

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

初始化api:

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

登錄授權(quán):

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("分享網(wǎng)頁測試");
shareMedia.setDescription("分享網(wǎng)頁測試");
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 分享媒介

現(xiàn)在集成了文字分享,圖片分享,音樂分享,視頻分享,網(wǎng)頁分享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 網(wǎng)頁分享

ShareWebMedia shareMedia = new ShareWebMedia();
shareMedia.setTitle("分享網(wǎng)頁測試");
shareMedia.setDescription("分享網(wǎng)頁測試");
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 常量定義

設(shè)置配置信息:

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 常量定義

設(shè)置配置信息:

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文件統(tǒng)一放到項目的目錄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>

并且在發(fā)起分享的activity頁面的AndroidManifest頁面中加上

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

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

實現(xiàn)IWeiboHandler.Response接口, 然后在實現(xiàn)的方法中寫:

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

實現(xiàn)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);
}

然后正常發(fā)起授權(quán)或者分享代碼即可.

7.3.3 常量定義

設(shè)置配置信息:

PlatformConfig.setSinaWB(SINA_WB_APPKEY);

7.3.4 注意

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

結(jié)尾

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子星瘾,更是在濱河造成了極大的恐慌走孽,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件琳状,死亡現(xiàn)場離奇詭異磕瓷,居然都是意外死亡,警方通過查閱死者的電腦和手機念逞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門困食,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人翎承,你說我怎么就攤上這事硕盹。” “怎么了叨咖?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵瘩例,是天一觀的道長。 經(jīng)常有香客問我芒澜,道長仰剿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任痴晦,我火速辦了婚禮南吮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘誊酌。我一直安慰自己部凑,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布碧浊。 她就那樣靜靜地躺著涂邀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪箱锐。 梳的紋絲不亂的頭發(fā)上比勉,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音驹止,去河邊找鬼浩聋。 笑死,一個胖子當(dāng)著我的面吹牛臊恋,可吹牛的內(nèi)容都是我干的衣洁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抖仅,長吁一口氣:“原來是場噩夢啊……” “哼坊夫!你這毒婦竟也來了砖第?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤环凿,失蹤者是張志新(化名)和其女友劉穎梧兼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拷邢,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡袱院,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年屎慢,在試婚紗的時候發(fā)現(xiàn)自己被綠了瞭稼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡腻惠,死狀恐怖环肘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情集灌,我是刑警寧澤悔雹,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站欣喧,受9級特大地震影響腌零,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜唆阿,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一益涧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧驯鳖,春花似錦闲询、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至记舆,卻和暖如春鸽捻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背泽腮。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工御蒲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盛正。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓删咱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親豪筝。 傳聞我的和親對象是個殘疾皇子痰滋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容