手把手教你集成---ShareSDK

第三方登錄

一.第三方登錄的定義

第三方登錄,就是利用用戶在第三方平臺上已有的賬號來快速完成自己應(yīng)用的登錄流程。這里的第三方平臺,如新浪微博,QQ,微信,F(xiàn)acebook,Twitter等平臺。這里我們可以登錄獲取相應(yīng)的用戶信息和授權(quán)信息,例如uid,token等。用戶可以獲取到信息用來做自己的操作。

二.獲取AppKey

如何在我們的官網(wǎng)注冊應(yīng)用得到appkey,請點擊鏈接看里面的操作步驟

三.下載SDK

請點擊這里進(jìn)去下載相應(yīng)的sdk

四.快速集成

第一步:將下載的SDK解壓后導(dǎo)入到您的工程中,見下圖

倒入SDK

拖到工程中后彈出以下對話框,勾選”Copy items into destination group’s folder(if needed)”,并點擊“Finish“按鈕。

注意:請務(wù)必在上述步驟中選擇“Create groups for any added folders”單選按鈕組。如果你選擇“Create folder references for any added folders”,一個藍(lán)色的文件夾引用將被添加到項目并且將無法找到它的資源。

第二步:添加依賴庫 添加步驟見下圖

添加依賴庫

必須添加的依賴庫如下(Xcode7 下.dylib庫后綴名更改為.tbd)

  • libicucore.tbd
  • libz.tbd
  • libstdc++.tbd
  • JavaScriptCore.framework
必須添加的依賴庫

以下依賴庫根據(jù)社交平臺添加:

新浪微博SDK依賴庫
  • ImageIO.framework
  • libsqlite3.dylib
QQ好友和QQ空間SDK依賴庫
  • libsqlite3.dylib
微信SDK依賴庫
  • libsqlite3.dylib
短信和郵件需要依賴庫
  • MessageUI.framework
    (注意:若不想導(dǎo)入不需要的平臺的依賴庫,可以到 ShareSDK 下的 PlatformSDK 文件夾將不需要的原生 SDK 移除。)

第三步:設(shè)置ShareSDK的Appkey并初始化對應(yīng)的第三方社交平臺 打開AppDelegate.m(代表你的工程名字)導(dǎo)入頭文件

#import <ShareSDK/ShareSDK.h>
#import <ShareSDKConnector/ShareSDKConnector.h>

//騰訊開放平臺(對應(yīng)QQ和QQ空間)SDK頭文件
#import <TencentOpenAPI/TencentOAuth.h>
#import <TencentOpenAPI/QQApiInterface.h>

//微信SDK頭文件
#import "WXApi.h"

//新浪微博SDK頭文件
#import "WeiboSDK.h"
//新浪微博SDK需要在項目Build Settings中的Other Linker Flags添加"-ObjC"

//人人SDK頭文件
//#import <RennSDK/RennSDK.h>

在- (BOOL)application: didFinishLaunchingWithOptions:方法中調(diào)用registerApp方法來初始化SDK并且初始化第三方平臺(各社交平臺申請APPkey 的網(wǎng)址及申請流程匯總

微信審核
微信審核
QQ審核
QQ審核
微博審核 --- 被駁回了(就你丫牛B)
微博審核
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    /**
     *  設(shè)置ShareSDK的appKey,如果尚未在ShareSDK官網(wǎng)注冊過App,請移步到http://mob.com/login 登錄后臺進(jìn)行應(yīng)用注冊,
     *  在將生成的AppKey傳入到此方法中。
     *  方法中的第二個第三個參數(shù)為需要連接社交平臺SDK時觸發(fā),
     *  在此事件中寫入連接代碼。第四個參數(shù)則為配置本地社交平臺時觸發(fā),根據(jù)返回的平臺類型來配置平臺信息。
     *  如果您使用的時服務(wù)端托管平臺信息時,第二、四項參數(shù)可以傳入nil,第三項參數(shù)則根據(jù)服務(wù)端托管平臺來決定要連接的社交SDK。
     */
    [ShareSDK registerApp:@"11fc7045d2ea6"

          activePlatforms:@[
                            @(SSDKPlatformTypeSinaWeibo),
                            @(SSDKPlatformTypeWechat),
                            @(SSDKPlatformTypeQQ)]
                 onImport:^(SSDKPlatformType platformType)
     {
         switch (platformType)
         {
             case SSDKPlatformTypeWechat:
                 [ShareSDKConnector connectWeChat:[WXApi class]];
                 break;
             case SSDKPlatformTypeQQ:
                 [ShareSDKConnector connectQQ:[QQApiInterface class] tencentOAuthClass:[TencentOAuth class]];
                 break;
             case SSDKPlatformTypeSinaWeibo:
                 [ShareSDKConnector connectWeibo:[WeiboSDK class]];
                 break;
             default:
                 break;
         }
     }
          onConfiguration:^(SSDKPlatformType platformType, NSMutableDictionary *appInfo)
     {

         switch (platformType)
         {
             case SSDKPlatformTypeSinaWeibo:
                 //設(shè)置新浪微博應(yīng)用信息,其中authType設(shè)置為使用SSO+Web形式授權(quán)
                 [appInfo SSDKSetupSinaWeiboByAppKey:@"568898243"
                                           appSecret:@"38a4f8204cc784f81f9f0daaf31e02e3"
                                         redirectUri:@"http://www.sharesdk.cn"
                                            authType:SSDKAuthTypeBoth];
                 break;
             case SSDKPlatformTypeWechat:
                 [appInfo SSDKSetupWeChatByAppId:@"wx073d3a1ae1e04e45"
                                       appSecret:@"51fbf957c83027d82cd90e1b42943271"];
                 break;
             case SSDKPlatformTypeQQ:
                 [appInfo SSDKSetupQQByAppId:@"1105278967"
                                      appKey:@"GUHbR2DyrVPo4ZY8"
                                    authType:SSDKAuthTypeBoth];
                 break;
             default:
                 break;
         }
     }];

    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];

    ViewController *vc = [[ViewController alloc]init];

    self.window.rootViewController = vc;

    [self.window makeKeyAndVisible];

    return YES;
}

(注意:每一個case對應(yīng)一個break不要忘記填寫,不然很可能有不必要的錯誤,新浪微博的外部庫如果不要客戶端分享或者不需要加關(guān)注微博的功能可以不添加,否則要添加,QQ,微信,google+這些外部庫文件必須要加)

第四步:添加實現(xiàn)代碼 打開需要集成登錄功能的視圖源碼,把如下代碼復(fù)制并粘貼到你要登錄的位置,例如到響應(yīng)登錄按鈕的方法中。并且修改相應(yīng)的參數(shù)即可。

這里以QQ登陸為例
(其他的平臺也一樣的處理,修改下初始化以及登陸方法里的平臺類型參數(shù):微信登錄-> SSDKPlatformTypeWechat,新浪微博登錄->SSDKPlatformTypeSinaWeibo,文檔最后介紹各個平臺需要配置的url schemes 參數(shù))

//例如QQ的登錄
[ShareSDK getUserInfo:SSDKPlatformTypeQQ
           onStateChanged:^(SSDKResponseState state, SSDKUser *user, NSError *error)
     {
         if (state == SSDKResponseStateSuccess)
         {

             NSLog(@"uid=%@",user.uid);
             NSLog(@"%@",user.credential);
             NSLog(@"token=%@",user.credential.token);
             NSLog(@"nickname=%@",user.nickname);
         }

         else
                 {
                     NSLog(@"%@",error);
                 }

     }];
也可以調(diào)用這個方法
// 導(dǎo)入頭文件
#import <ShareSDKExtension/SSEThirdPartyLoginHelper.h>

[SSEThirdPartyLoginHelper loginByPlatform:SSDKPlatformTypeQQ
                                   onUserSync:^(SSDKUser *user, SSEUserAssociateHandler associateHandler) {

                                       //在此回調(diào)中可以將社交平臺用戶信息與自身用戶系統(tǒng)進(jìn)行綁定,最后使用一個唯一用戶標(biāo)識來關(guān)聯(lián)此用戶信息。
                                       //在此示例中沒有跟用戶系統(tǒng)關(guān)聯(lián),則使用一個社交用戶對應(yīng)一個系統(tǒng)用戶的方式。將社交用戶的uid作為關(guān)聯(lián)ID傳入associateHandler。
                                       associateHandler (user.uid, user, user);
                                        NSLog(@"dd%@",user.rawData);
                                         NSLog(@"dd%@",user.credential);

                                   }
                                onLoginResult:^(SSDKResponseState state, SSEBaseUser *user, NSError *error) {

                                    if (state == SSDKResponseStateSuccess)
                                    {

                                    }

                                }];

第五步:支持QQ客戶端登錄的相關(guān)配置

QQ如果要跳客戶端登錄的話,需要配置下URL Scheme:

然后打開下圖位置,在URL Types中添加騰訊AppID,其格式為:tencent+appID(你在QQ中申請的AppId), 如:tencent100371282。如圖所示:

QQ登陸相關(guān)配置
各個主流社交平臺登錄需要配置的url schemes:
配置url schemes

問題1: 使用新浪微博會出現(xiàn)如下錯誤

微博錯誤

解決:設(shè)置-all_load運行成功 設(shè)置-Objc Crash

解決辦法

問題2: 新浪微博授權(quán)頁面異常

授權(quán)界面異常

解決:選擇[管理中心]->[我的應(yīng)用]->["您的應(yīng)用名"]->展開左側(cè)[應(yīng)用信息]->[高級信息]->OAuth2.0 授權(quán)設(shè)置 右上角[編輯]->在框里填入回調(diào)地址即可.(前期測試應(yīng)用時隨便填個公司主頁即可.兩個地址可以相同)

設(shè)置授權(quán)回調(diào)頁

問題3: 打印出retryHandleOpenURL

解決:bundle id 與 微博審核的應(yīng)用的bundle id 不一樣

核對Bundle ID

問題4: 尚未設(shè)置QQ的URL Scheme

錯誤日志

####解決: 你也可以直接拷貝系統(tǒng)提示信息中的設(shè)置

?QQ好友跟空間不是一個url schemes

其格式為:"QQ” + AppId的16進(jìn)制(如果appId轉(zhuǎn)換的16進(jìn)制數(shù)不夠8位則在前面補0,如轉(zhuǎn)換的是:5FB8B52,則最終填入為:QQ05FB8B52 注意:轉(zhuǎn)換后的字母要大寫)

附: 官方的demo是多工程項目,以下是分類

注: 想了解多工程的使用請點擊這里

官方demo分類

分享

簡單分享

#pragma mark - 分享
- (IBAction)fenxiangBtn:(id)sender {
    //copy如下代碼即可實現(xiàn)簡單的分享
    //1、創(chuàng)建分享參數(shù)
    NSMutableDictionary *shareParams = [NSMutableDictionary dictionary];
    NSArray* imageArray = @[[UIImage imageNamed:@"shareImg.png"]];
    if (imageArray)
    {
        [shareParams SSDKSetupShareParamsByText:@"分享內(nèi)容 我是內(nèi)容我是內(nèi)容我是內(nèi)容我是內(nèi)容我是內(nèi)容我是內(nèi)容我是內(nèi)容我是內(nèi)容"
                                         images:imageArray
                                            url:[NSURL URLWithString:@"http://www.itdecent.cn/p/44e2c9d09398"]
                                          title:@"分享標(biāo)題"
                                           type:SSDKContentTypeAuto];
    }

    //2、分享
    [ShareSDK share:SSDKPlatformTypeWechat
         parameters:shareParams
     onStateChanged:^(SSDKResponseState state, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error)
     {
         switch (state) {
             case SSDKResponseStateSuccess:
             {
                 UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"分享成功"
                                                                     message:nil
                                                                    delegate:nil
                                                           cancelButtonTitle:@"確定"
                                                           otherButtonTitles:nil];
                 [alertView show];
                 break;
             }
             case SSDKResponseStateFail:
             {
                 UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"分享失敗"
                                                                     message:[NSString stringWithFormat:@"%@", error]
                                                                    delegate:nil
                                                           cancelButtonTitle:@"確定"
                                                           otherButtonTitles:nil];
                 [alertView show];
                 break;
             }
             case SSDKResponseStateCancel:
             {
                 UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"分享已取消"
                                                                     message:nil
                                                                    delegate:nil
                                                           cancelButtonTitle:@"確定"
                                                           otherButtonTitles:nil];
                 [alertView show];
                 break;
             }
             default:
                 break;
         }
     }];

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 搜狗 Passport iOS SDK 是搜狗為開發(fā)者提供的第三方單點登錄和搜狗賬戶注冊登錄服務(wù)。本版本提供的第三...
    Www劉閱讀 2,428評論 2 1
  • 由于近期工作需要自己抽時間搞了一下第三方分享,這里使用的是shareSDK的第三方,在使用的過程中有一些心得和體會...
    燦爛先森閱讀 11,457評論 29 69
  • 官方網(wǎng)站說明 步驟流程 1 使用分享現(xiàn)注冊一個應(yīng)用得到AppKey 2 下載SDK, 直接將文件拖入工程中 3 然...
    kuxiu閱讀 1,152評論 0 1
  • 2017年4月3日 北京霾 兩天的小長假,對我來說也是兩天的加班。 忙活了半天終于將BW項目的調(diào)研問卷做出來了,是...
    JerryLi123閱讀 379評論 0 0
  • 月亮升起來了,照著大地。 小兔剛好肚子餓了,他摸摸肚子,望著月亮想:月亮是個香噴噴的披薩餅。 孔雀展開五顏六色的尾...
    沈嘉寧閱讀 401評論 0 1

友情鏈接更多精彩內(nèi)容