天天看點

使用ShareSDK完成第三方(QQ、微信、微網誌)登入和分享

這幾天遇到一個需求:做第三方登入和分享。遇到了一些坑,把整個過程整理記錄下來,友善他人,同時也捋一下思路。

當時考慮過把每個平台的SDK下載下傳下來,一個一個弄,一番取舍後決定還是用ShareSDK。這裡隻做了微網誌、微信和QQ。過程如下:

1.去ShareSDK官網注冊一個賬号友善以後對ShareSDK的配置。

2.按照內建文檔的步驟開始做,不得不說這個內建文檔裡面有坑,有坑的地方我會指出。

使用ShareSDK完成第三方(QQ、微信、微網誌)登入和分享

文檔中心

3.添加一個應用。有很多種方式可以添加一個應用,多點點。這裡我建立了一個test應用。

使用ShareSDK完成第三方(QQ、微信、微網誌)登入和分享

添加應用

建立後進去的頁面如下:

使用ShareSDK完成第三方(QQ、微信、微網誌)登入和分享

應用概況

這裡的App Key和App Secret(不顯示的話,點選顯示)很重要,可以用來初始化ShareSDK,

4.下載下傳SDK。

使用ShareSDK完成第三方(QQ、微信、微網誌)登入和分享

下載下傳SDK

這裡是第一個坑,雖然你可以自定義下載下傳SDK,如果你做QQ分享和登入,一定不要忘記下載下傳QQ空間的SDK。因為QQ本身不支援第三方登入,但支援第三方分享包括QQ空間分享,QQ空間支援第三方登入,是以如果你做QQ分享和登入,一定要記得下載下傳QQ空間的SDK。如果隻做分享,那隻下載下傳QQ的就行。這裡我被坑過,ShareSDK提供的文檔裡面沒有說明。

使用ShareSDK完成第三方(QQ、微信、微網誌)登入和分享

自定義下載下傳SDK

下載下傳後的SDK檔案目錄:

使用ShareSDK完成第三方(QQ、微信、微網誌)登入和分享

下載下傳後的SDK檔案目錄

5.把下載下傳的ShareSDK添加到項目中。

使用ShareSDK完成第三方(QQ、微信、微網誌)登入和分享

項目中的ShareSDK

到現在為止運作項目是會報錯的,原因是沒有添加相關的依賴庫。

6.添加相關的依賴庫。

以下摘自ShareSDK提供的文檔。

必須添加的依賴庫如下:

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

以下依賴庫根據社交平台添加

新浪微網誌SDK依賴庫 (從v2.10.5開始)

ImageIO.framework      

QQ好友和QQ空間SSO必要(新注冊騰訊開放平台帳号隻支援SSO授權,隻是老開發者才可以使用網頁授權)

libstdc++.dylib
libsqlite3.dylib      

添加相應依賴庫後的項目結構是這個樣子的:

使用ShareSDK完成第三方(QQ、微信、微網誌)登入和分享

添加相應依賴庫後項目結構

到這裡運作項目是不會報錯的,如果報錯,檢查添加的依賴庫是缺了、漏了、還是錯了。

在​

​AppDelegate.m​

​中添加以下頭檔案,再運作項目看看,這是不會報錯的,如果報錯看提示資訊,多搜尋,相信是能夠解決的。

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

7.到相應開發者平台注冊開發者賬号,并添加你要進行分享和使用第三方登入應用的資訊。

注意:這三家的開放平台,目前為止,頁面做的都跟山寨網站似的(微信的好一點),奇卡無比。當然這不是吐槽的重點,重點是注冊流程繁瑣,還要認證開發者身份,需要等一個工作日。其中如果做微信登入的話,每年要交300元的什麼費。這裡沒有什麼難度就是個體力活,就不詳說了,有什麼疑問,請留言,你的留言也是對我的信任和支援。

注冊完,申請完就可以拿到AppID、AppSecret、AppKey等東西。

使用ShareSDK完成第三方(QQ、微信、微網誌)登入和分享

微網誌的

使用ShareSDK完成第三方(QQ、微信、微網誌)登入和分享

QQ的

使用ShareSDK完成第三方(QQ、微信、微網誌)登入和分享

微信的

注:QQ的AppKey在ShareSDK中叫AppSecret。名字不統一,這個比較扯淡。

拿到這些AppID、AppSecret、AppKey等東西後就可以開始對ShareSDK進行初始化。

​AppDelegate.m​

​中添加下面這個方法,并記得在​

​- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions​

​方法中調用。

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

    //對新浪微網誌SDK進行初始化
    [ShareSDK connectSinaWeiboWithAppKey:@"406116xxxx"
                           appSecret:@"b6a542582057e39a6fca582b14dxxxxxx"
                            redirectUri:@"http://www.xxxx.com"];
    //注這裡的redirectUri要與你在新浪微網誌開放平台上填寫的那個授權回調頁的URL保持一緻,否則在使用微網誌登入的時候會報一個redirectUri找不到的錯誤,這裡是一個坑。
    //突然發現這裡redirectUri是什麼鬼?難道ShareSDK的制作者敲錯了?不應該是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參數,是你在QQ開放平台是拿到的AppKey

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

8.添加URL Schemes。

點選:項目名 > TARGETS > info > URL Types 點選添加URL Types。

如圖:

使用ShareSDK完成第三方(QQ、微信、微網誌)登入和分享

添加URL Schemes

在URL Schemes後面的框裡添上對應資訊。

新浪微網誌的URL Schemes是:wb 加上在微網誌開放平台申請的AppKey。
微信的URL Schemes是:微信開放平台申請的AppID。
QQ空間的URL Schemes是:QQ開放平台申請的 tencent 加上 AppID。(如果隻做分享的話,可以不添加,做登入的話必須添加)
QQ的URL Schemes是:QQ 加上 AppID的16進制(如果AppID轉換的16進制數不夠8位則在前面補0,如轉換的是:5FB8B52,則最終填入為:QQ05FB8B52 注意:轉換後的字母要大寫)      

轉換16進制的方法:​

​echo 'ibase=10;obase=16;801312852'|bc​

​,其中801312852為QQ的AppID,見下圖:

使用ShareSDK完成第三方(QQ、微信、微網誌)登入和分享

QQ URLSchemes

添加完URL Schemes後,在​

​AppDelegate.m​

​檔案中添加以下對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];
 }      

到此第三方的準備工作就算是做完了。

9.寫分享的代碼。

(1)在界面上添加按鈕,并綁定響應事件。

(2)寫事件處理代碼。

事件處理代碼,如下:

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

    //構造分享内容
    id<ISSContent> publishContent = [ShareSDK content:@"ShareSDK無比強大哦"
                                       defaultContent:@""
                                                image:[ShareSDK imageWithPath:img]
                                                title:@"示範Demo中的标題"
                                                  url:@"http://www.mob.com"
                                          description:@"測試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", @"發表成功"));
                        }
                        else if (state == SSPublishContentStateFail)
                        {
                            NSLog(NSLocalizedString(@"TEXT_SHARE_FAI", @"釋出失敗!error code == %d, error code == %@"), [error errorCode], [error errorDescription]);
                        }

                    }];

}      

方法中的​

​shareType​

​參數傳什麼值就分享到什麼平台:

ShareTypeSinaWeibo            //新浪微網誌 
ShareTypeQQSpace              //QQ空間 (注意:填寫這個類型就可以分享到好友和QQ空間,也可以用來做登入)
ShareTypeWeixiSession         //微信好友 (這個類型也可以用來做微信登入)
ShareTypeWeixiTimeline        //微信朋友圈      

到這裡分享就算是做好了。

10.寫登入代碼。(這裡在ShareSDK的文檔裡,又有一個坑)

(1)在ShareSDK做第三方登入的文檔裡,這裡要求去一個​​Parse​​的網站注冊下載下傳一大堆東西。并添加一堆依賴庫,可這些并沒有什麼卵用。理由如下:

​它讓在應用了內建Parse,就是做一個對第三方平台傳回的資訊(id、nickname、profileImage)進行存儲,可這些,我們都是存自己公司伺服器的,做這些都是扯淡的,但文檔裡并沒有說明。我靠,讓我郁悶半天。​

(2)在界面添加按鈕,并綁定響應事件。

(3)寫響應代碼(以QQ登入為例,三個平台的代碼是一樣的,不同點在Type這個參數上)。

- (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裡面的值做處理,存伺服器或者什麼的

            UIAlertView *alertView = [[UIAlertView alloc]
                                          initWithTitle:@"Hello"
                                          message:@"歡迎注冊"
                                          delegate:nil
                                          cancelButtonTitle:@"知道了"
                                          otherButtonTitles: nil];
            [alertView show];
           } else {
            UIAlertView *alertView = [[UIAlertView alloc]
                                  initWithTitle:@"Hello"
                                  message:@"歡迎回來"
                                  delegate:nil
                                  cancelButtonTitle:@"知道了"
                                  otherButtonTitles:nil];
            [alertView show];
        }
    }];
}      
[ShareSDK cancelAuthWithType:ShareTypeQQSpace]; //這裡以QQ為例了      

繼續閱讀