? ? ?以前老是看到別人說(shuō)要多整理,以前我不以為然税手,覺(jué)得我會(huì)用就行了,干嘛還要整理需纳,繼前兩天有時(shí)間整理了第一篇之后冈止,才感覺(jué)到“好記性不如爛筆頭”的重要性,萬(wàn)事開(kāi)頭難候齿,剛開(kāi)始寫(xiě)也有點(diǎn)茫然熙暴,總想著要怎么組織語(yǔ)言闺属,怎么寫(xiě)的幽默又能讓別人看懂,不過(guò)對(duì)于剛開(kāi)始寫(xiě)簡(jiǎn)書(shū)的我來(lái)說(shuō)還是有點(diǎn)困難周霉,來(lái)吧掂器,慢慢進(jìn)步,先行動(dòng)起來(lái)俱箱。
? ? ? 最近很多項(xiàng)目中都是用到了第三方的登錄和分享国瓮,雖然說(shuō)可以按照官方文檔去一步步實(shí)現(xiàn),但總還是會(huì)遇到一些坑狞谱,下面我就說(shuō)說(shuō)我在項(xiàng)目中是怎么使用第三方的登錄跟分享的(我這里使用的share sdk)乃摹。
? ? ? 1.注冊(cè)賬號(hào):首先,我們需要在share sdk官網(wǎng)(http://www.mob.com)注冊(cè)一個(gè)賬號(hào)跟衅,然后登錄孵睬,進(jìn)入主界面,首先就是創(chuàng)建我們的應(yīng)用了伶跷,在右上角點(diǎn)擊“進(jìn)入后臺(tái)”掰读,如下圖:
? ? ? ?然后點(diǎn)擊我們要使用的ShareSdk,如下圖:
? ? ? ? 2.添加應(yīng)用:鼠標(biāo)移動(dòng)到“應(yīng)用”菜單,選擇添加應(yīng)用叭莫,如下圖:
? ? ? ? 3.輸入應(yīng)用名稱(chēng)蹈集,并選擇Android,點(diǎn)擊添加,如下圖:
? ? ? ?添加成功后會(huì)跳轉(zhuǎn)我們創(chuàng)建的應(yīng)用界面雇初,并且可以看到我們分享所需要的App Key 和App Secret,創(chuàng)建好了應(yīng)用拢肆,下一步就是在A(yíng)PP中的使用了,首先看一下官方文檔靖诗,點(diǎn)擊官方文檔郭怪,找到我們需要的“安卓集成文檔”,就到了如下界面:
按照右側(cè)官方文檔的流程呻畸,先配置一下我們的APP,主要是一下幾個(gè)步驟:
(1)獲取ShareSDK的AppKey ,這個(gè)在我們創(chuàng)建好應(yīng)用了之后就已經(jīng)有了
(2)下載sdk
(3)快速集成
(2)悼院、(3)官網(wǎng)文檔已經(jīng)說(shuō)的很清楚了伤为,我這里就不再說(shuō)明啦。
上面說(shuō)了那么多据途,我們用的還是sharesdk的測(cè)試賬號(hào)進(jìn)行分享绞愚,下面就說(shuō)說(shuō)如何在我們的項(xiàng)目中用自己的賬號(hào)進(jìn)行分享和登錄(在這之前首先要保證在上面的測(cè)試中,分享是沒(méi)有問(wèn)題的颖医,沒(méi)有出現(xiàn)崩潰什么的位衩,再進(jìn)行我們的下一步)
4:一般我們的項(xiàng)目中集成的有QQ、微信熔萧、新浪糖驴,下面我們就說(shuō)說(shuō)在一個(gè)項(xiàng)目中如何使用這三種平臺(tái)進(jìn)行分享和登錄僚祷,第一次用的時(shí)候也是走了不少坑,希望我的文章能幫助你少走一些坑贮缕,首先我們的項(xiàng)目一般很少是個(gè)人的辙谜,大部分都是公司項(xiàng)目,所以要在這三種平臺(tái)進(jìn)行分享感昼,首先要分別在這三個(gè)平臺(tái)注冊(cè)一個(gè)企業(yè)賬號(hào)(注意:填寫(xiě)企業(yè)信息的時(shí)候三個(gè)平臺(tái)要保持一致装哆,不要問(wèn)我為啥,為了少點(diǎn)坑定嗓,哈哈蜕琴,如果三個(gè)平臺(tái)的企業(yè)信息不一致,后面的審核APP會(huì)有很多問(wèn)題宵溅,到時(shí)候又要回去改凌简,真的是很麻煩),如果是個(gè)人层玲,那你注冊(cè)個(gè)人賬號(hào)就可以了号醉,下面我就用使用企業(yè)賬號(hào)來(lái)舉例,
(1).騰訊開(kāi)放平臺(tái) http://wiki.open.qq.com
上面說(shuō)了辛块,我們要先注冊(cè)賬號(hào)畔派,并填寫(xiě)信息,并通過(guò)審核润绵,才有使用QQ進(jìn)行第三方操作的資質(zhì)呀线椰,資質(zhì)有了,先來(lái)就是該創(chuàng)建我們的應(yīng)用了尘盼,
看圖說(shuō)話(huà)憨愉,如下:
點(diǎn)擊“創(chuàng)建應(yīng)用”
選擇“移動(dòng)應(yīng)用 安卓” ,點(diǎn)擊“創(chuàng)建應(yīng)用”卿捎,繼續(xù)看圖:
選擇“安卓應(yīng)用類(lèi)型”配紫,根據(jù)自己的APP類(lèi)型,自己選擇午阵,點(diǎn)擊“確定”,看圖:
下面就是“完善信息”了躺孝,這里我也不用怎么說(shuō),該怎么寫(xiě)就怎么寫(xiě)底桂,帶*的必須寫(xiě)哦植袍,需要注意的就是我們上傳的安裝包,可能不符合騰訊審核的規(guī)則籽懦,這個(gè)時(shí)候要使用騰訊的第三方加固(以前還是要自己寫(xiě)命令加固的于个,現(xiàn)在都做成軟件了,直接下載加固你的APP就行)暮顺,其他的就不用說(shuō)了厅篓,按照要求寫(xiě)就行秀存,寫(xiě)完了記得檢查一遍哦,然后點(diǎn)擊“提交審核”贷笛,大約需要1-2個(gè)工作日应又,耐心等待哈。通過(guò)審核了就可以得到我們需要的APP ID 和 APP KEY:如下圖
(2).新浪微博開(kāi)放平臺(tái)賬號(hào) http://open.weibo.com/
點(diǎn)擊“微連接”選擇“移動(dòng)應(yīng)用”乏苦,點(diǎn)擊“立即接入”株扛,如下圖:
? ?點(diǎn)擊“繼續(xù)創(chuàng)建”,輸入“應(yīng)用名稱(chēng)”汇荐,選擇“應(yīng)用平臺(tái)”洞就,點(diǎn)擊創(chuàng)建,如下圖:
下面就是填寫(xiě)我們的應(yīng)用信息了掀淘,如下圖:
這里的“Android簽名” 可以通過(guò)該平臺(tái)的簽名工具獲取旬蟋,是一個(gè)apk文件,下載了安裝到你的手機(jī)上革娄,同時(shí)你的手機(jī)也要安裝要審核的APP倾贰,然后打開(kāi)下載的獲取簽名文件的app,輸入你的app的包名拦惋,就可以獲取到簽名信息了匆浙,是不是很方便呢,剩下的信息厕妖,只有一個(gè)需要我們?nèi)チ硗庖粋€(gè)平臺(tái)申請(qǐng)首尼,其他的直接寫(xiě)就好了,看圖說(shuō)話(huà):
就是這個(gè)“Android下載地址”,這個(gè)地址怎么寫(xiě)呢言秸,寫(xiě)什么呢软能,而且還必須寫(xiě),寫(xiě)錯(cuò)了審核還過(guò)補(bǔ)了举畸,其實(shí)這個(gè)地址是我們的APP在其他平臺(tái)已經(jīng)上線(xiàn)并且可以搜索下載的地址查排,我這里使用的360開(kāi)放平臺(tái) http://dev.#/html/ad/index.html,這里要注意的是360開(kāi)放平臺(tái)上的賬號(hào)信息要跟你其他平臺(tái)上的一致抄沮,也就是都是屬于同一個(gè)企業(yè)或者個(gè)人的跋核,不然,哼哼合是,你的新浪微博審核是不會(huì)通過(guò)的呦了罪,其實(shí)360就相當(dāng)于是我們應(yīng)用的一個(gè)下載平臺(tái)锭环,我們要先將應(yīng)用在360上上線(xiàn)聪全,然后回去到應(yīng)用的推廣地址,大致流程是下面這樣子的:
首先保證你的應(yīng)用已將上線(xiàn)辅辩,然后點(diǎn)擊你的應(yīng)用难礼,點(diǎn)擊“推廣下下載地址”如下圖:
點(diǎn)擊“立即使用”娃圆,看圖:
看到?jīng)],這個(gè)應(yīng)用推廣地址蛾茉,就是我們?cè)谏暾?qǐng)新浪微博的時(shí)候要填寫(xiě)的“Android下載地址”
好了讼呢,信息基本是填寫(xiě)完了,點(diǎn)擊保存谦炬,然后提交審核悦屏,新浪微博的審核還挺快的,一個(gè)工作日键思,耐心等待础爬。通過(guò)審核后,就可以獲取到我們的需要的App Key和App Secret吼鳞。
審核通過(guò)后看蚜,我們還有一個(gè)重要的地方要改,要不然是授權(quán)不成功的赔桌,來(lái)吧供炎,看圖:
那,就是這個(gè)回調(diào)頁(yè)疾党,記得音诫,必須寫(xiě)哦(可以寫(xiě)公司的官網(wǎng))。
(3) 微信開(kāi)放平臺(tái) https://open.weixin.qq.com/
微信的審核比較嚴(yán)格仿贬,而且還需要付費(fèi)纽竣,一年好像是300塊。
好了茧泪,開(kāi)始我們的流程蜓氨,登錄我們注冊(cè)的微信開(kāi)放平臺(tái)賬號(hào),點(diǎn)擊“移動(dòng)應(yīng)用開(kāi)發(fā)”队伟,如下圖
點(diǎn)擊“創(chuàng)建應(yīng)用”
填寫(xiě)基本應(yīng)用的信息穴吹,這個(gè)就不多說(shuō)了,自己寫(xiě)嗜侮,接下來(lái)是填寫(xiě)平臺(tái)信息港令,輸入“應(yīng)用官網(wǎng)”并選擇應(yīng)用平臺(tái),如下圖:
這些信息也沒(méi)什么難度锈颗,直接寫(xiě)就好了顷霹,點(diǎn)擊“提交審核”,大概需要7個(gè)工作日击吱,一般3.4天就可以審核完畢淋淀。
至此,我們?cè)赒Q覆醇、新浪微博朵纷、微信平臺(tái)上的應(yīng)用審核就抖已經(jīng)完成了炭臭,接下來(lái)就是如何在項(xiàng)目中去使用了。
5.在share sdk官網(wǎng)創(chuàng)建應(yīng)用的時(shí)候袍辞,我們就已經(jīng)按照官方的文檔鞋仍,將我們需要jar包等集成到了我們的項(xiàng)目中,也在manifest文件中進(jìn)行了配置搅吁,如下圖:
? ? ? ? ? ?然后在我們的asstes文件下找到ShareSdk.xml并打開(kāi)威创,如下圖:
(1)修改ShareSdk 的AppKey,改為你在ShareSdk官網(wǎng)創(chuàng)建的應(yīng)用的AppKey,如下圖:
(2)修改各個(gè)平臺(tái)的AppId和AppKey谎懦,如下圖:
好了那婉,需要修改的我們都已經(jīng)改好了,現(xiàn)在就可以在項(xiàng)目中使用啦党瓮。
6.先說(shuō)第三方登錄详炬,話(huà)不多說(shuō),直接上代碼寞奸,看圖說(shuō)話(huà):
/**
*新浪第三方登錄
*/
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,
"微信未安裝,請(qǐng)先安裝微信",
Toast.LENGTH_LONG).show();
}
authorize(wechat);
}
/**
* QQ第三方登錄
*/
private voidqqLogin() {
ShareSDK.initSDK(this);
Platform qq = ShareSDK.getPlatform(QQ.NAME);
qq.SSOSetting(true);
authorize(qq);
}
/**
*第三方登錄選擇 要數(shù)據(jù)不要功能
*
*@paramplat
*/
private voidauthorize(Platform plat) {
if(plat ==null) {
return;
}
plat.setPlatformActionListener(this);
//關(guān)閉SSO授權(quán)
plat.SSOSetting(false);
plat.showUser(null);
}
回調(diào)的監(jiān)聽(tīng) ?我們要實(shí)現(xiàn)PlatformActionListener 這個(gè)接口呛谜,有三個(gè)回調(diào)方法,onComplete()枪萄、onError()隐岛、onCancel(),分別是授權(quán)成功、授權(quán)失敗瓷翻、取消授權(quán)聚凹,授權(quán)成功后,我們就可以獲取到自己想要的數(shù)據(jù)了齐帚,如下圖是我需要的數(shù)據(jù):
另外兩個(gè)方法妒牙,這里就不多少了,自己要做什么處理对妄,直接寫(xiě)就好啦湘今,登錄的差不多就是這些,下面來(lái)看看分享的吧剪菱。
7.關(guān)于第三方分享摩瞎,其實(shí)也不難,我們可以使用ShareSdk默認(rèn)的分享界面孝常,也可以自定義分享界面旗们,我們先看看默認(rèn)的分享是什么樣子的,先看代碼(官方代碼):
privatevoidshowShare(){
ShareSDK.initSDK(this);
OnekeyShareoks=newOnekeyShare();
//關(guān)閉sso授權(quán)
oks.disableSSOWhenAuthorize();
// 分享時(shí)Notification的圖標(biāo)和文字 ?2.5.9以后的版本不調(diào)用此方法
//oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));
// title標(biāo)題,印象筆記构灸、郵箱上渴、信息、微信、人人網(wǎng)和QQ空間使用
oks.setTitle(getString(R.string.share));
// titleUrl是標(biāo)題的網(wǎng)絡(luò)鏈接驰贷,僅在人人網(wǎng)和QQ空間使用
oks.setTitleUrl("http://sharesdk.cn");
// text是分享文本,所有平臺(tái)都需要這個(gè)字段
oks.setText("我是分享文本");
// imagePath是圖片的本地路徑洛巢,Linked-In以外的平臺(tái)都支持此參數(shù)
//oks.setImagePath("/sdcard/test.jpg");//確保SDcard下面存在此張圖片
// url僅在微信(包括好友和朋友圈)中使用
oks.setUrl("http://sharesdk.cn");
// comment是我對(duì)這條分享的評(píng)論括袒,僅在人人網(wǎng)和QQ空間使用
oks.setComment("我是測(cè)試評(píng)論文本");
// site是分享此內(nèi)容的網(wǎng)站名稱(chēng),僅在QQ空間使用
oks.setSite(getString(R.string.app_name));
// siteUrl是分享此內(nèi)容的網(wǎng)站地址稿茉,僅在QQ空間使用
oks.setSiteUrl("http://sharesdk.cn");
// 啟動(dòng)分享GUI
oks.show(this);
}
編譯并運(yùn)行后锹锰,彈出類(lèi)似下圖的的分享列表選擇頁(yè)面,點(diǎn)擊后彈出分享窗口漓库,點(diǎn)擊發(fā)表后就成功發(fā)送到社交平臺(tái)的話(huà)說(shuō)明你已經(jīng)基本集成成功了恃慧。
就是這么簡(jiǎn)單,哈哈渺蒿。
下面再看看我們自定義的分享界面然后痢士,這里我使用的是截屏分享:
首先我是自定義了一個(gè)dialog, 然后點(diǎn)擊分享的時(shí)候去截屏茂装,看看截屏的代碼:
/**
*截圖
*/
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);//關(guān)閉流
}
if(bitmap !=null) {//內(nèi)存優(yōu)化
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);//設(shè)置分享事件回調(diào)
//執(zhí)行圖文分享
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));//標(biāo)題的超鏈接
sp2.setText(res.getString(R.string.share_Text));
File iconDir2 =newFileStorage().getIconDir();
File file2 =newFile(iconDir2,shareImagename);
// imagePath是圖片的本地路徑城侧,Linked-In以外的平臺(tái)都支持此參數(shù)
sp2.setImagePath(file2.getAbsolutePath());
// sp.setImageUrl("http://www.someserver.com/測(cè)試圖片網(wǎng)絡(luò)地址.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);//設(shè)置分享事件回調(diào)
//執(zhí)行圖文分享
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()) {//如果沒(méi)有安裝微信客戶(hù)端,則提醒用戶(hù)安裝
Toast.makeText(mContext,
"微信未安裝,請(qǐng)先安裝微信",
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,
"微信未安裝,請(qǐng)先安裝微信",
Toast.LENGTH_LONG).show();
}
weixinMoments.setPlatformActionListener(platformActionListener);
weixinMoments.share(wechatMoments);
分享的監(jiān)聽(tīng):
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();
}
};
好了彼妻,大功告成嫌佑,至于分享,到此也就結(jié)束啦侨歉。
寫(xiě)了這么多屋摇,雖然感覺(jué)寫(xiě)的不是很好,但自己還是很滿(mǎn)意幽邓,畢竟是自己一字一字的寫(xiě)出來(lái)的摊册,也是自己慢慢整理的,算是自己的東西了吧颊艳,第三方的東西用起來(lái)是不錯(cuò)茅特,但有時(shí)候也是會(huì)碰到一些坑,這個(gè)時(shí)候不要慌棋枕,一定不要慌白修,還有客服呢,不要怕重斑,哈哈兵睛,多和平臺(tái)的客服交流一下,他們會(huì)給你想要的結(jié)果,好了祖很,使用ShareSdk進(jìn)行第三方分享跟登錄就到這里啦笛丙,歡迎大家進(jìn)行補(bǔ)充糾正。O(∩_∩)O哈哈~