? ? ?以前老是看到別人說要多整理,以前我不以為然,覺得我會用就行了,干嘛還要整理,繼前兩天有時間整理了第一篇之后,才感覺到“好記性不如爛筆頭”的重要性,萬事開頭難,剛開始寫也有點茫然,總想著要怎么組織語言,怎么寫的幽默又能讓別人看懂,不過對于剛開始寫簡書的我來說還是有點困難,來吧,慢慢進步,先行動起來。
? ? ? 最近很多項目中都是用到了第三方的登錄和分享,雖然說可以按照官方文檔去一步步實現,但總還是會遇到一些坑,下面我就說說我在項目中是怎么使用第三方的登錄跟分享的(我這里使用的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文件中進行了配置,如下圖:
? ? ? ? ? ?然后在我們的asstes文件下找到ShareSdk.xml并打開,如下圖:
(1)修改ShareSdk 的AppKey,改為你在ShareSdk官網創建的應用的AppKey,如下圖:
(2)修改各個平臺的AppId和AppKey,如下圖:
好了,需要修改的我們都已經改好了,現在就可以在項目中使用啦。
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哈哈~