在日常的app開發(fā)中,我們經常會遇到第三方登錄和分享的問題,比如我們的微信揽趾、qq的分享和登錄。再遇到這些問題的時候苛骨,我們通常是通過官方的文檔去實現(xiàn)相應的功能篱瞎,但是這也造成了我們代碼的繁瑣和重復。所以在這個背景下shareSDK被制作出來痒芝。
官方網(wǎng)址:http://wiki.mob.com
官方介紹:ShareSDK是一種社會化分享組件俐筋,為iOS、Android严衬、WP8 的APP提供社會化功能澄者,集成了一些常用的類庫和接口,縮短開發(fā)者的開發(fā)時間请琳,還有社會化統(tǒng)計分析管理后臺粱挡。
通過shareSDK我們可以實現(xiàn)第三方登錄和一鍵分享。
同時shareSDK是支持多平臺的俄精,這里我們說的是iOS平臺的使用询筏。
我們通過項目中的代碼來演示:
- 第一步:配置shareSDK
我們通常會選擇快速集成sdk,也就是將下載的SDK解壓后導入到您的工程中竖慧。
這里你點擊官方文檔查看嫌套,解釋的還是很詳細的快速集成鏈接
- 第二步:添加實現(xiàn)代碼
#import "AppDelegate.h"
//微信SDK頭文件
#import "WXApi.h"
//新浪微博SDK頭文件
#import "WeiboSDK.h"
#import <TencentOpenAPI/TencentOAuth.h>
#import <TencentOpenAPI/QQApiInterface.h>
//ShareSDK
#import <ShareSDK/ShareSDK.h>
#import <ShareSDKConnector/ShareSDKConnector.h>
//導入頭文件并初始化注冊第三方平臺
NSArray *activePlatforms =@[
@(SSDKPlatformTypeSinaWeibo),
@(SSDKPlatformTypeQQ),
@(SSDKPlatformTypeWechat),
@(SSDKPlatformSubTypeWechatSession),
@(SSDKPlatformSubTypeWechatTimeline)
];
[ShareSDK registerActivePlatforms:activePlatforms 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:
//設置新浪微博應用信息,其中authType設置為使用SSO+Web形式授權
[appInfo SSDKSetupSinaWeiboByAppKey:@""
appSecret:@""
redirectUri:@""
authType:SSDKAuthTypeBoth];
break;
case SSDKPlatformTypeWechat:
[appInfo SSDKSetupWeChatByAppId:@""
appSecret:@""];
break;
case SSDKPlatformTypeQQ:
[appInfo SSDKSetupQQByAppId:@""
appKey:@""
authType:SSDKAuthTypeBoth];
break;
default:
break;
}
}];
- 第三步:實現(xiàn)第三方登錄 官方-第三方登錄
方法一:authorize:授權逆屡,可以獲取到授權信息和用戶信息,每次都會重新請求授權登錄界面踱讨,進行跳轉
#import <ShareSDK/ShareSDK.h>
[ShareSDK authorize:SSDKPlatformTypeQQ settings:nil onStateChanged:^(SSDKResponseState state, SSDKUser *user, NSError *error) {
if (state == SSDKResponseStateSuccess)
{
NSLog(@"%@",user.rawData);
NSLog(@"uid===%@",user.uid);
NSLog(@"%@",user.credential);
}
else if (state == SSDKResponseStateCancel)
{
NSLog(@"取消");
}
else if (state == SSDKResponseStateFail)
{
NSLog(@"%@",error);
}
}];
方法二:getUserInfo:獲取授權用戶信息魏蔗,第一次授權會請求授權界面,之后會默認第一次的授權勇蝙,直接獲取到緩存里的用戶信息沫勿,不會在跳授權登錄界面,如果要重新跳轉授權界面味混,需要調用取消授權的接口
[ShareSDK getUserInfo:SSDKPlatformTypeQQ onStateChanged:^(SSDKResponseState state, SSDKUser *user, NSError *error){
if (state == SSDKResponseStateSuccess){
[ShareSDK cancelAuthorize:SSDKPlatformTypeAny];(目前這個方法已經更新)
NSDictionary *parameters = @{
@"access_token":user.credential.token,
@"openid":user.uid
};
//請求的接口
}
else if (state == SSDKResponseStateCancel)
{
NSLog(@"取消");
}
else if (state == SSDKResponseStateFail)
{
NSLog(@"%@",error);
}
}];
注意:如果上面方法不去取消平臺的授權那么每次都會登錄第一個的賬號产雹。
取消分享平臺授權
/* @param platformType 平臺類型 */
+ (void)cancelAuthorize:(SSDKPlatformType)platformType result:(void(^)(NSError *error))result;
[ShareSDK cancelAuthorize:SSDKPlatformTypeFacebook result:^(NSError *error) {
if (!error) {
NSLog(@"取消成功");
}
else
{
NSLog(@"%@",error);
}
}];