安卓進階第二篇之使用ShareSdk進行第三方登錄和分享(過程比較詳細)

? ? ?以前老是看到別人說要多整理,以前我不以為然,覺得我會用就行了,干嘛還要整理,繼前兩天有時間整理了第一篇之后,才感覺到“好記性不如爛筆頭”的重要性,萬事開頭難,剛開始寫也有點茫然,總想著要怎么組織語言,怎么寫的幽默又能讓別人看懂,不過對于剛開始寫簡書的我來說還是有點困難,來吧,慢慢進步,先行動起來。

? ? ? 最近很多項目中都是用到了第三方的登錄和分享,雖然說可以按照官方文檔去一步步實現,但總還是會遇到一些坑,下面我就說說我在項目中是怎么使用第三方的登錄跟分享的(我這里使用的share sdk)。


? ? ? 1.注冊賬號:首先,我們需要在share sdk官網(http://www.mob.com)注冊一個賬號,然后登錄,進入主界面,首先就是創建我們的應用了,在右上角點擊“進入后臺”,如下圖:

? ? ? ?然后點擊我們要使用的ShareSdk,如下圖:


? ? ? ? 2.添加應用:鼠標移動到“應用”菜單,選擇添加應用,如下圖:

? ? ? ? 3.輸入應用名稱,并選擇Android,點擊添加,如下圖:


? ? ? ?添加成功后會跳轉我們創建的應用界面,并且可以看到我們分享所需要的App Key 和App Secret,創建好了應用,下一步就是在APP中的使用了,首先看一下官方文檔,點擊官方文檔,找到我們需要的“安卓集成文檔”,就到了如下界面:


按照右側官方文檔的流程,先配置一下我們的APP,主要是一下幾個步驟:

(1)獲取ShareSDK的AppKey ,這個在我們創建好應用了之后就已經有了

(2)下載sdk

(3)快速集成

(2)、(3)官網文檔已經說的很清楚了,我這里就不再說明啦。

上面說了那么多,我們用的還是sharesdk的測試賬號進行分享,下面就說說如何在我們的項目中用自己的賬號進行分享和登錄(在這之前首先要保證在上面的測試中,分享是沒有問題的,沒有出現崩潰什么的,再進行我們的下一步)

4:一般我們的項目中集成的有QQ、微信、新浪,下面我們就說說在一個項目中如何使用這三種平臺進行分享和登錄,第一次用的時候也是走了不少坑,希望我的文章能幫助你少走一些坑,首先我們的項目一般很少是個人的,大部分都是公司項目,所以要在這三種平臺進行分享,首先要分別在這三個平臺注冊一個企業賬號(注意:填寫企業信息的時候三個平臺要保持一致,不要問我為啥,為了少點坑,哈哈,如果三個平臺的企業信息不一致,后面的審核APP會有很多問題,到時候又要回去改,真的是很麻煩),如果是個人,那你注冊個人賬號就可以了,下面我就用使用企業賬號來舉例,

(1).騰訊開放平臺 http://wiki.open.qq.com

上面說了,我們要先注冊賬號,并填寫信息,并通過審核,才有使用QQ進行第三方操作的資質呀,資質有了,先來就是該創建我們的應用了,

看圖說話,如下:


點擊“創建應用”


選擇“移動應用 安卓” ,點擊“創建應用”,繼續看圖:


選擇“安卓應用類型”,根據自己的APP類型,自己選擇,點擊“確定”,看圖:


下面就是“完善信息”了,這里我也不用怎么說,該怎么寫就怎么寫,帶*的必須寫哦,需要注意的就是我們上傳的安裝包,可能不符合騰訊審核的規則,這個時候要使用騰訊的第三方加固(以前還是要自己寫命令加固的,現在都做成軟件了,直接下載加固你的APP就行),其他的就不用說了,按照要求寫就行,寫完了記得檢查一遍哦,然后點擊“提交審核”,大約需要1-2個工作日,耐心等待哈。通過審核了就可以得到我們需要的APP ID 和 APP KEY:如下圖



(2).新浪微博開放平臺賬號 http://open.weibo.com/

點擊“微連接”選擇“移動應用”,點擊“立即接入”,如下圖:


? ?點擊“繼續創建”,輸入“應用名稱”,選擇“應用平臺”,點擊創建,如下圖:


下面就是填寫我們的應用信息了,如下圖:


這里的“Android簽名” 可以通過該平臺的簽名工具獲取,是一個apk文件,下載了安裝到你的手機上,同時你的手機也要安裝要審核的APP,然后打開下載的獲取簽名文件的app,輸入你的app的包名,就可以獲取到簽名信息了,是不是很方便呢,剩下的信息,只有一個需要我們去另外一個平臺申請,其他的直接寫就好了,看圖說話:


就是這個“Android下載地址”,這個地址怎么寫呢,寫什么呢,而且還必須寫,寫錯了審核還過補了,其實這個地址是我們的APP在其他平臺已經上線并且可以搜索下載的地址,我這里使用的360開放平臺 http://dev.360.cn/html/ad/index.html,這里要注意的是360開放平臺上的賬號信息要跟你其他平臺上的一致,也就是都是屬于同一個企業或者個人的,不然,哼哼,你的新浪微博審核是不會通過的呦,其實360就相當于是我們應用的一個下載平臺,我們要先將應用在360上上線,然后回去到應用的推廣地址,大致流程是下面這樣子的:


首先保證你的應用已將上線,然后點擊你的應用,點擊“推廣下下載地址”如下圖:


點擊“立即使用”,看圖:


看到沒,這個應用推廣地址,就是我們在申請新浪微博的時候要填寫的“Android下載地址”

好了,信息基本是填寫完了,點擊保存,然后提交審核,新浪微博的審核還挺快的,一個工作日,耐心等待。通過審核后,就可以獲取到我們的需要的App Key和App Secret。

審核通過后,我們還有一個重要的地方要改,要不然是授權不成功的,來吧,看圖:



那,就是這個回調頁,記得,必須寫哦(可以寫公司的官網)。


(3) 微信開放平臺 https://open.weixin.qq.com/

微信的審核比較嚴格,而且還需要付費,一年好像是300塊。

好了,開始我們的流程,登錄我們注冊的微信開放平臺賬號,點擊“移動應用開發”,如下圖


點擊“創建應用”


填寫基本應用的信息,這個就不多說了,自己寫,接下來是填寫平臺信息,輸入“應用官網”并選擇應用平臺,如下圖:


這些信息也沒什么難度,直接寫就好了,點擊“提交審核”,大概需要7個工作日,一般3.4天就可以審核完畢。

至此,我們在QQ、新浪微博、微信平臺上的應用審核就抖已經完成了,接下來就是如何在項目中去使用了。

5.在share sdk官網創建應用的時候,我們就已經按照官方的文檔,將我們需要jar包等集成到了我們的項目中,也在manifest文件中進行了配置,如下圖:


需要的權限


注冊activity

? ? ? ? ? ?然后在我們的asstes文件下找到ShareSdk.xml并打開,如下圖:


(1)修改ShareSdk 的AppKey,改為你在ShareSdk官網創建的應用的AppKey,如下圖:


(2)修改各個平臺的AppId和AppKey,如下圖:


QQ


新浪微博


微信

好了,需要修改的我們都已經改好了,現在就可以在項目中使用啦。

6.先說第三方登錄,話不多說,直接上代碼,看圖說話:

/**

*新浪第三方登錄

*/

private voidsinaLogoin() {

ShareSDK.initSDK(this);

Platform sina = ShareSDK.getPlatform(SinaWeibo.NAME);

sina.SSOSetting(true);

authorize(sina);

}

/**

*微信第三方登錄

*/

private voidweixinLogoin() {

ShareSDK.initSDK(this);

Platform wechat = ShareSDK.getPlatform(this,Wechat.NAME);

wechat.SSOSetting(true);

if(!wechat.isClientValid()) {

Toast.makeText(mContext,

"微信未安裝,請先安裝微信",

Toast.LENGTH_LONG).show();

}

authorize(wechat);

}

/**

* QQ第三方登錄

*/

private voidqqLogin() {

ShareSDK.initSDK(this);

Platform qq = ShareSDK.getPlatform(QQ.NAME);

qq.SSOSetting(true);

authorize(qq);

}


/**

*第三方登錄選擇 要數據不要功能

*

*@paramplat

*/

private voidauthorize(Platform plat) {

if(plat ==null) {

return;

}

plat.setPlatformActionListener(this);

//關閉SSO授權

plat.SSOSetting(false);

plat.showUser(null);

}


回調的監聽 ?我們要實現PlatformActionListener 這個接口,有三個回調方法,onComplete()、onError()、onCancel(),分別是授權成功、授權失敗、取消授權,授權成功后,我們就可以獲取到自己想要的數據了,如下圖是我需要的數據:


獲取到的個人平臺信息

另外兩個方法,這里就不多少了,自己要做什么處理,直接寫就好啦,登錄的差不多就是這些,下面來看看分享的吧。

7.關于第三方分享,其實也不難,我們可以使用ShareSdk默認的分享界面,也可以自定義分享界面,我們先看看默認的分享是什么樣子的,先看代碼(官方代碼):

privatevoidshowShare(){

ShareSDK.initSDK(this);

OnekeyShareoks=newOnekeyShare();

//關閉sso授權

oks.disableSSOWhenAuthorize();

// 分享時Notification的圖標和文字 ?2.5.9以后的版本不調用此方法

//oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));

// title標題,印象筆記、郵箱、信息、微信、人人網和QQ空間使用

oks.setTitle(getString(R.string.share));

// titleUrl是標題的網絡鏈接,僅在人人網和QQ空間使用

oks.setTitleUrl("http://sharesdk.cn");

// text是分享文本,所有平臺都需要這個字段

oks.setText("我是分享文本");

// imagePath是圖片的本地路徑,Linked-In以外的平臺都支持此參數

//oks.setImagePath("/sdcard/test.jpg");//確保SDcard下面存在此張圖片

// url僅在微信(包括好友和朋友圈)中使用

oks.setUrl("http://sharesdk.cn");

// comment是我對這條分享的評論,僅在人人網和QQ空間使用

oks.setComment("我是測試評論文本");

// site是分享此內容的網站名稱,僅在QQ空間使用

oks.setSite(getString(R.string.app_name));

// siteUrl是分享此內容的網站地址,僅在QQ空間使用

oks.setSiteUrl("http://sharesdk.cn");

// 啟動分享GUI

oks.show(this);

}

編譯并運行后,彈出類似下圖的的分享列表選擇頁面,點擊后彈出分享窗口,點擊發表后就成功發送到社交平臺的話說明你已經基本集成成功了。



就是這么簡單,哈哈。

下面再看看我們自定義的分享界面然后,這里我使用的是截屏分享:

首先我是自定義了一個dialog, 然后點擊分享的時候去截屏,看看截屏的代碼:

/**

*截圖

*/

privateStringgetIcon() {

String imageName =null;

File iconDir =newFileStorage().getIconDir();

imageName = UUID.randomUUID().toString() +".png";

File imageFile =newFile(iconDir,imageName);

try{

bgView.setDrawingCacheEnabled(true);

bgView.buildDrawingCache();

Bitmap obtainBitmap =bgView.getDrawingCache();

Bitmap bitmap = Bitmap.createBitmap(obtainBitmap,0,0,bgView.getWidth(),bgView.getHeight() -bottom_ll.getHeight());

bgView.destroyDrawingCache();

bgView.setDrawingCacheEnabled(false);

FileOutputStream out =null;

try{

out =newFileOutputStream(imageFile);

bitmap.compress(Bitmap.CompressFormat.PNG,100,out);

}catch(FileNotFoundException e) {

e.printStackTrace();

}finally{

StreamUtil.safeClose(out);//關閉流

}

if(bitmap !=null) {//內存優化

bitmap.recycle();

}

}catch(Exception e) {

}

return ?imageName;

}

注意:bgView 就是我們要截屏的View ,bottom_ll是我圖片下面不需要的一些高度,這里可以自己改一下,刪除了也是可以的,下面我們看看分享的代碼:

(1)微博:

shareImagename= getIcon();

SinaWeibo.ShareParams sp1 =newSinaWeibo.ShareParams();

File iconDir1 =newFileStorage().getIconDir();

File file1 =newFile(iconDir1,shareImagename);

sp1.setImagePath(file1.getAbsolutePath());

Platform weibo = ShareSDK.getPlatform(SinaWeibo.NAME);

weibo.SSOSetting(true);

weibo.setPlatformActionListener(platformActionListener);//設置分享事件回調

//執行圖文分享

weibo.share(sp1);

(2)QQ:

shareImagename= getIcon();

QQ.ShareParams sp2 =newQQ.ShareParams();

sp2.setTitle(res.getString(R.string.app_name));

sp2.setTitleUrl(res.getString(R.string.share_title_url));//標題的超鏈接

sp2.setText(res.getString(R.string.share_Text));

File iconDir2 =newFileStorage().getIconDir();

File file2 =newFile(iconDir2,shareImagename);

// imagePath是圖片的本地路徑,Linked-In以外的平臺都支持此參數

sp2.setImagePath(file2.getAbsolutePath());

// sp.setImageUrl("http://www.someserver.com/測試圖片網絡地址.jpg");

sp2.setSite(getString(R.string.app_name));

sp2.setSiteUrl(res.getString(R.string.share_title_url));

Platform qzone = ShareSDK.getPlatform(QQ.NAME);

qzone.setPlatformActionListener(platformActionListener);//設置分享事件回調

//執行圖文分享

qzone.share(sp2);

(3)微信:

shareImagename= getIcon();

Platform.ShareParams wechat =newPlatform.ShareParams();

wechat.setTitle(res.getString(R.string.app_name));

wechat.setText(res.getString(R.string.share_Text));

File iconDir =newFileStorage().getIconDir();

File file =newFile(iconDir,shareImagename);

wechat.setImagePath(file.getAbsolutePath());

wechat.setUrl(res.getString(R.string.share_title_url));

wechat.setShareType(Platform.SHARE_WEBPAGE);

Platform weixin = ShareSDK.getPlatform(mContext,

Wechat.NAME);

if(!weixin.isClientValid()) {//如果沒有安裝微信客戶端,則提醒用戶安裝

Toast.makeText(mContext,

"微信未安裝,請先安裝微信",

Toast.LENGTH_LONG).show();

}

weixin.setPlatformActionListener(platformActionListener);

weixin.share(wechat);

(4)微信朋友圈

shareImagename= getIcon();

Platform.ShareParams wechatMoments =newPlatform.ShareParams();

wechatMoments.setTitle(res.getString(R.string.app_name));

wechatMoments.setText(res.getString(R.string.share_Text));

File iconDir4 =newFileStorage().getIconDir();

File file4 =newFile(iconDir4,shareImagename);

wechatMoments.setImagePath(file4.getAbsolutePath());

wechatMoments.setUrl(res.getString(R.string.share_title_url));

wechatMoments.setShareType(Platform.SHARE_WEBPAGE);

Platform weixinMoments = ShareSDK.getPlatform(mContext,

WechatMoments.NAME);

if(!weixinMoments.isClientValid()) {

Toast.makeText(mContext,

"微信未安裝,請先安裝微信",

Toast.LENGTH_LONG).show();

}

weixinMoments.setPlatformActionListener(platformActionListener);

weixinMoments.share(wechatMoments);

分享的監聽:

privatePlatformActionListenerplatformActionListener=newPlatformActionListener() {

@Override

public voidonCancel(Platform arg0, intarg1) {

viewPager.setCurrentItem(viewPagerPosition);

}

@Override

public voidonComplete(Platform arg0, intarg1,

HashMap arg2) {

Toast.makeText(mContext,res.getString(R.string.share_success),Toast.LENGTH_LONG).show();

}

@Override

public voidonError(Platform arg0, intarg1,Throwable arg2) {

Toast.makeText(mContext,res.getString(R.string.share_fail),Toast.LENGTH_LONG).show();

}

};

好了,大功告成,至于分享,到此也就結束啦。

寫了這么多,雖然感覺寫的不是很好,但自己還是很滿意,畢竟是自己一字一字的寫出來的,也是自己慢慢整理的,算是自己的東西了吧,第三方的東西用起來是不錯,但有時候也是會碰到一些坑,這個時候不要慌,一定不要慌,還有客服呢,不要怕,哈哈,多和平臺的客服交流一下,他們會給你想要的結果,好了,使用ShareSdk進行第三方分享跟登錄就到這里啦,歡迎大家進行補充糾正。O(∩_∩)O哈哈~

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

推薦閱讀更多精彩內容