使用ShareSDK完成第三方(QQ或粮、微信、微博)登錄和分享

這幾天遇到一個(gè)需求:做第三方登錄和分享捞高。遇到了一些坑氯材,把整個(gè)過(guò)程整理記錄下來(lái),方便他人硝岗,同時(shí)也捋一下思路氢哮。

當(dāng)時(shí)考慮過(guò)把每個(gè)平臺(tái)的SDK下載下來(lái),一個(gè)一個(gè)弄型檀,一番取舍后決定還是用ShareSDK命浴。這里只做了微博、微信和QQ贱除。過(guò)程如下:

1.去ShareSDK官網(wǎng)注冊(cè)一個(gè)賬號(hào)方便以后對(duì)ShareSDK的配置生闲。

2.按照集成文檔的步驟開(kāi)始做,不得不說(shuō)這個(gè)集成文檔里面有坑月幌,有坑的地方我會(huì)指出碍讯。

文檔中心

3.添加一個(gè)應(yīng)用。有很多種方式可以添加一個(gè)應(yīng)用扯躺,多點(diǎn)點(diǎn)捉兴。這里我創(chuàng)建了一個(gè)test應(yīng)用蝎困。

添加應(yīng)用

創(chuàng)建后進(jìn)去的頁(yè)面如下:

應(yīng)用概況

這里的App Key和App Secret(不顯示的話,點(diǎn)擊顯示)很重要倍啥,可以用來(lái)初始化ShareSDK禾乘,

4.下載SDK。

下載SDK

這里是第一個(gè)坑虽缕,雖然你可以自定義下載SDK始藕,如果你做QQ分享和登錄,一定不要忘記下載QQ空間的SDK氮趋。因?yàn)镼Q本身不支持第三方登錄伍派,但支持第三方分享包括QQ空間分享,QQ空間支持第三方登錄剩胁,所以如果你做QQ分享和登錄诉植,一定要記得下載QQ空間的SDK。如果只做分享昵观,那只下載QQ的就行晾腔。這里我被坑過(guò),ShareSDK提供的文檔里面沒(méi)有說(shuō)明啊犬。

自定義下載SDK

下載后的SDK文件目錄:

下載后的SDK文件目錄

5.把下載的ShareSDK添加到項(xiàng)目中建车。

項(xiàng)目中的ShareSDK

到現(xiàn)在為止運(yùn)行項(xiàng)目是會(huì)報(bào)錯(cuò)的,原因是沒(méi)有添加相關(guān)的依賴庫(kù)椒惨。

6.添加相關(guān)的依賴庫(kù)。

以下摘自ShareSDK提供的文檔潮罪。

必須添加的依賴庫(kù)如下:

SystemConfiguration.framework
QuartzCore.framework
CoreTelephony.framework
libicucore.dylib
libz.1.2.5.dylib
Security.framework

以下依賴庫(kù)根據(jù)社交平臺(tái)添加
新浪微博SDK依賴庫(kù) (從v2.10.5開(kāi)始)

 ImageIO.framework

QQ好友和QQ空間SSO必要(新注冊(cè)騰訊開(kāi)放平臺(tái)帳號(hào)只支持SSO授權(quán)康谆,只是老開(kāi)發(fā)者才可以使用網(wǎng)頁(yè)授權(quán))

libstdc++.dylib
libsqlite3.dylib

添加相應(yīng)依賴庫(kù)后的項(xiàng)目結(jié)構(gòu)是這個(gè)樣子的:

添加相應(yīng)依賴庫(kù)后項(xiàng)目結(jié)構(gòu)
到這里運(yùn)行項(xiàng)目是不會(huì)報(bào)錯(cuò)的,如果報(bào)錯(cuò)嫉到,檢查添加的依賴庫(kù)是缺了沃暗、漏了、還是錯(cuò)了何恶。

AppDelegate.m中添加以下頭文件孽锥,再運(yùn)行項(xiàng)目看看,這是不會(huì)報(bào)錯(cuò)的细层,如果報(bào)錯(cuò)看提示信息惜辑,多搜索,相信是能夠解決的疫赎。

#import <ShareSDK/ShareSDK.h>
#import <TencentOpenAPI/QQApiInterface.h>
#import <TencentOpenAPI/TencentOAuth.h>
#import "WXApi.h"
#import "WeiboSDK.h"

7.到相應(yīng)開(kāi)發(fā)者平臺(tái)注冊(cè)開(kāi)發(fā)者賬號(hào)盛撑,并添加你要進(jìn)行分享和使用第三方登錄應(yīng)用的信息。

添加新浪微博應(yīng)用 注冊(cè)網(wǎng)址 http://open.weibo.com
添加QQ應(yīng)用 注冊(cè)網(wǎng)址 http://mobile.qq.com/api/
添加微信應(yīng)用 http://open.weixin.qq.com

注意:這三家的開(kāi)放平臺(tái)捧搞,目前為止抵卫,頁(yè)面做的都跟山寨網(wǎng)站似的(微信的好一點(diǎn))狮荔,奇卡無(wú)比。當(dāng)然這不是吐槽的重點(diǎn)介粘,重點(diǎn)是注冊(cè)流程繁瑣殖氏,還要認(rèn)證開(kāi)發(fā)者身份,需要等一個(gè)工作日姻采。其中如果做微信登錄的話雅采,每年要交300元的什么費(fèi)。這里沒(méi)有什么難度就是個(gè)體力活偎谁,就不詳說(shuō)了总滩,有什么疑問(wèn),請(qǐng)留言巡雨,你的留言也是對(duì)我的信任和支持闰渔。

注冊(cè)完,申請(qǐng)完就可以拿到AppID铐望、AppSecret冈涧、AppKey等東西。

微博的
QQ的
微信的

注:QQ的AppKey在ShareSDK中叫AppSecret正蛙。名字不統(tǒng)一督弓,這個(gè)比較扯淡。

拿到這些AppID乒验、AppSecret愚隧、AppKey等東西后就可以開(kāi)始對(duì)ShareSDK進(jìn)行初始化。

AppDelegate.m中添加下面這個(gè)方法锻全,并記得在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中調(diào)用狂塘。

- (void)initShareSDK {
    [ShareSDK registerApp:@"884a1b86xxxx"];

    //對(duì)新浪微博SDK進(jìn)行初始化
    [ShareSDK connectSinaWeiboWithAppKey:@"406116xxxx"
                           appSecret:@"b6a542582057e39a6fca582b14dxxxxxx"
                            redirectUri:@"http://www.xxxx.com"];
    //注這里的redirectUri要與你在新浪微博開(kāi)放平臺(tái)上填寫的那個(gè)授權(quán)回調(diào)頁(yè)的URL保持一致,否則在使用微博登錄的時(shí)候會(huì)報(bào)一個(gè)redirectUri找不到的錯(cuò)誤鳄厌,這里是一個(gè)坑荞胡。
    //突然發(fā)現(xiàn)這里redirectUri是什么鬼?難道ShareSDK的制作者敲錯(cuò)了了嚎?不應(yīng)該是URL嗎泪漂?

    //QQ分享SDK初始化
    [ShareSDK connectQQWithQZoneAppKey:@"110467xxxx"
                 qqApiInterfaceCls:[QQApiInterface class]
                   tencentOAuthCls:[TencentOAuth class]];

    //QQ登錄SDK初始化
    [ShareSDK connectQZoneWithAppKey:@"1104677455"
                       appSecret:@"KnjAB2I0G8Vxxxxx"
               qqApiInterfaceCls:[QQApiInterface class]
                 tencentOAuthCls:[TencentOAuth class]];
    // 注:QQ登錄的appSecret參數(shù),是你在QQ開(kāi)放平臺(tái)是拿到的AppKey

    //對(duì)微信SDK進(jìn)行初始化
   [ShareSDK connectWeChatWithAppId:@"wx02e84c8fa45xxxx"
                       appSecret:@"ef9006286ce2637caeb648cb58dxxxx"
                       wechatCls:[WXApi class]];
}

8.添加URL Schemes歪泳。
點(diǎn)擊:項(xiàng)目名 > TARGETS > info > URL Types 點(diǎn)擊添加URL Types萝勤。
如圖:

添加URL Schemes

在URL Schemes后面的框里添上對(duì)應(yīng)信息。

新浪微博的URL Schemes是:wb 加上在微博開(kāi)放平臺(tái)申請(qǐng)的AppKey呐伞。
微信的URL Schemes是:微信開(kāi)放平臺(tái)申請(qǐng)的AppID纵刘。
QQ空間的URL Schemes是:QQ開(kāi)放平臺(tái)申請(qǐng)的 tencent 加上 AppID。(如果只做分享的話荸哟,可以不添加假哎,做登錄的話必須添加)
QQ的URL Schemes是:QQ 加上 AppID的16進(jìn)制(如果AppID轉(zhuǎn)換的16進(jìn)制數(shù)不夠8位則在前面補(bǔ)0瞬捕,如轉(zhuǎn)換的是:5FB8B52,則最終填入為:QQ05FB8B52 注意:轉(zhuǎn)換后的字母要大寫)

轉(zhuǎn)換16進(jìn)制的方法:echo 'ibase=10;obase=16;801312852'|bc舵抹,其中801312852為QQ的AppID肪虎,見(jiàn)下圖:

QQ URLSchemes

添加完URL Schemes后,在AppDelegate.m文件中添加以下對(duì)URL處理的代碼:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    return [ShareSDK handleOpenURL:url wxDelegate:self];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [ShareSDK handleOpenURL:url
             sourceApplication:sourceApplication
                    annotation:annotation
                    wxDelegate:self];
 }

到此第三方的準(zhǔn)備工作就算是做完了惧蛹。

9.寫分享的代碼扇救。

(1)在界面上添加按鈕,并綁定響應(yīng)事件香嗓。
(2)寫事件處理代碼迅腔。

事件處理代碼,如下:

- (void)thridPartyShareWithShareType:(ShareType)shareType {
    //只需要在響應(yīng)分享按鈕的方法中添加以下代碼即可
    NSString *img = [[NSBundle mainBundle] pathForResource:@"mm" ofType:@"png"];

    //構(gòu)造分享內(nèi)容
    id<ISSContent> publishContent = [ShareSDK content:@"ShareSDK無(wú)比強(qiáng)大哦"
                                       defaultContent:@""
                                                image:[ShareSDK imageWithPath:img]
                                                title:@"演示Demo中的標(biāo)題"
                                                  url:@"http://www.mob.com"
                                          description:@"測(cè)試DEMO正在制作中靠娱,歡迎大家觀看"
                                            mediaType:SSPublishContentMediaTypeNews];

    [ShareSDK shareContent:publishContent
                      type:shareType
               authOptions:nil
              shareOptions:nil
             statusBarTips:YES
                    result:^(ShareType type, SSResponseState state, id<ISSPlatformShareInfo> statusInfo, id<ICMErrorInfo> error, BOOL end) {
                        if (state == SSPublishContentStateSuccess)
                        {
                            NSLog(NSLocalizedString(@"TEXT_SHARE_SUC", @"發(fā)表成功"));
                        }
                        else if (state == SSPublishContentStateFail)
                        {
                            NSLog(NSLocalizedString(@"TEXT_SHARE_FAI", @"發(fā)布失敗!error code == %d, error code == %@"), [error errorCode], [error errorDescription]);
                        }
                    
                    }];

}

方法中的shareType參數(shù)傳什么值就分享到什么平臺(tái):

ShareTypeSinaWeibo            //新浪微博 
ShareTypeQQSpace              //QQ空間 (注意:填寫這個(gè)類型就可以分享到好友和QQ空間沧烈,也可以用來(lái)做登錄)
ShareTypeWeixiSession         //微信好友 (這個(gè)類型也可以用來(lái)做微信登錄)
ShareTypeWeixiTimeline        //微信朋友圈
到這里分享就算是做好了。

</br>
10.寫登錄代碼像云。(這里在ShareSDK的文檔里锌雀,又有一個(gè)坑
(1)在ShareSDK做第三方登錄的文檔里,這里要求去一個(gè)Parse的網(wǎng)站注冊(cè)下載一大堆東西迅诬。并添加一堆依賴庫(kù)腋逆,可這些并沒(méi)有什么卵用。理由如下:

它讓在應(yīng)用了集成Parse侈贷,就是做一個(gè)對(duì)第三方平臺(tái)返回的信息(id惩歉、nickname、profileImage)進(jìn)行存儲(chǔ)俏蛮,可這些撑蚌,我們都是存自己公司服務(wù)器的,做這些都是扯淡的嫁蛇,但文檔里并沒(méi)有說(shuō)明。我靠露该,讓我郁悶半天睬棚。

(2)在界面添加按鈕,并綁定響應(yīng)事件解幼。
(3)寫響應(yīng)代碼(以QQ登錄為例抑党,三個(gè)平臺(tái)的代碼是一樣的,不同點(diǎn)在Type這個(gè)參數(shù)上)撵摆。

- (IBAction)QQLogin:(UIButton *)sender {
    [ShareSDK getUserInfoWithType:ShareTypeQQSpace authOptions:nil result:^(BOOL result, id<ISSPlatformUser> userInfo, id<ICMErrorInfo> error) {
        if (result) {
            NSLog(@"%hhd", result);
            NSLog(@"%@", [userInfo uid]);
            NSLog(@"%@", [userInfo nickname]);
            NSLog(@"%@", [userInfo profileImage]);
       
            //在這里把拿到的userInfo里面的值做處理底靠,存服務(wù)器或者什么的

            UIAlertView *alertView = [[UIAlertView alloc]
                                          initWithTitle:@"Hello"
                                          message:@"歡迎注冊(cè)"
                                          delegate:nil
                                          cancelButtonTitle:@"知道了"
                                          otherButtonTitles: nil];
            [alertView show];
           } else {
            UIAlertView *alertView = [[UIAlertView alloc]
                                  initWithTitle:@"Hello"
                                  message:@"歡迎回來(lái)"
                                  delegate:nil
                                  cancelButtonTitle:@"知道了"
                                  otherButtonTitles:nil];
            [alertView show];
        }
    }];
}

到這里第三方登錄就算是做好了。</br>
最后特铝,退出登錄授權(quán)使用一下代碼暑中。

[ShareSDK cancelAuthWithType:ShareTypeQQSpace]; //這里以QQ為例了
總結(jié)壹瘟,整個(gè)過(guò)程來(lái)看是沒(méi)有什么技術(shù)含量的,但讓人感到困難的原因就是這些平臺(tái)提供的文檔問(wèn)題鳄逾,不清晰稻轨,不說(shuō)明是干什么的,浪費(fèi)很多時(shí)間去理解這些文檔雕凹。我強(qiáng)壓怒火的在心中喊一句:操殴俱。然后接著埋頭寫代碼了。



下篇見(jiàn)~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末枚抵,一起剝皮案震驚了整個(gè)濱河市线欲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌汽摹,老刑警劉巖李丰,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異竖慧,居然都是意外死亡嫌套,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門圾旨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)踱讨,“玉大人,你說(shuō)我怎么就攤上這事砍的”陨福” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵廓鞠,是天一觀的道長(zhǎng)帚稠。 經(jīng)常有香客問(wèn)我,道長(zhǎng)床佳,這世上最難降的妖魔是什么滋早? 我笑而不...
    開(kāi)封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮砌们,結(jié)果婚禮上杆麸,老公的妹妹穿的比我還像新娘。我一直安慰自己浪感,他們只是感情好昔头,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著影兽,像睡著了一般揭斧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上峻堰,一...
    開(kāi)封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天讹开,我揣著相機(jī)與錄音盅视,去河邊找鬼。 笑死萧吠,一個(gè)胖子當(dāng)著我的面吹牛左冬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纸型,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼拇砰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了狰腌?” 一聲冷哼從身側(cè)響起除破,我...
    開(kāi)封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎琼腔,沒(méi)想到半個(gè)月后瑰枫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丹莲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年光坝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甥材。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盯另,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出洲赵,到底是詐尸還是另有隱情鸳惯,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布叠萍,位于F島的核電站芝发,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏苛谷。R本人自食惡果不足惜辅鲸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腹殿。 院中可真熱鬧独悴,春花似錦、人聲如沸赫蛇。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)悟耘。三九已至,卻和暖如春织狐,著一層夾襖步出監(jiān)牢的瞬間暂幼,已是汗流浹背筏勒。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留旺嬉,地道東北人管行。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像邪媳,于是被迫代替她去往敵國(guó)和親捐顷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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