前言
最近項(xiàng)目需要加入第三方分享功能钢猛,看了網(wǎng)上的一些第三方SDK的介紹,覺(jué)得ShareSDK是一個(gè)很強(qiáng)大方便的第三方工具轩缤,所以選擇了ShareSDK來(lái)完成命迈。這里記錄一下完整的集成與使用流程。
1.申請(qǐng)ShareSDK的AppKey以及第三方平臺(tái)的AppKey
ShareSDK的AppKey直接到Mob官網(wǎng)申請(qǐng)即可火的,具體的注冊(cè)應(yīng)用的流程請(qǐng)參考這里:Mob創(chuàng)建應(yīng)用流程
其他第三方平臺(tái)的AppKey需要到對(duì)應(yīng)的第三方平臺(tái)注冊(cè)應(yīng)用申請(qǐng):
新浪微博請(qǐng)參考:新浪微博注冊(cè)流程
QQ請(qǐng)參考:QQ注冊(cè)流程
微信請(qǐng)參考:微信注冊(cè)流程
(我這里的Demo為了方便直接用了ShareSDK的Demo里面提供的AppKey壶愤,但是創(chuàng)建的項(xiàng)目Bundle id要和ShareSDK的Demo里一致。真實(shí)項(xiàng)目需要自己另外申請(qǐng)馏鹤,這個(gè)你們自己參考下注冊(cè)流程哈征椒,按照步驟來(lái)走,怎么也得會(huì)的哈~~~~~~~~~~)
2.下載SDK
下載地址:http://www.mob.com/downloadDetail/ShareSDK/ios
下載的時(shí)候根據(jù)自己需求選擇需要的平臺(tái)湃累,我這里選擇的是默認(rèn)分享視圖勃救,只測(cè)試微博,微信治力,QQ蒙秒。
下載之后解壓出來(lái)如下,我們需要導(dǎo)入項(xiàng)目的是這整個(gè)SDK資源文件:
3.開(kāi)始集成
(1)將上面下載的SDK文件夾拖進(jìn)Xcode項(xiàng)目里宵统,如下圖:
注意:直接拖SDK進(jìn)去請(qǐng)務(wù)必在上述步驟中選擇“Create groups ”單選按鈕組税肪。如果你選擇“Create folder references”,一個(gè)藍(lán)色的文件夾引用將被添加到項(xiàng)目并且將無(wú)法找到它的資源。
(2)添加依賴庫(kù)益兄,添加步驟如下圖:
必須添加的依賴庫(kù)如下(Xcode 7 之后 *.dylib庫(kù)后綴名更改為*.tbd):
libicucore.dylib
libz.dylib
?libstdc++.dylib
JavaScriptCore.framework
以下依賴庫(kù)根據(jù)社交平臺(tái)添加:
新浪微博SDK依賴庫(kù)
ImageIO.framework
libsqlite3.dylib
QQ好友和QQ空間SDK依賴庫(kù)
libsqlite3.dylib
微信SDK依賴庫(kù)
libsqlite3.dylib
(3)設(shè)置ShareSDK的Appkey并調(diào)用初始化方法初始化對(duì)應(yīng)的第三方社交平臺(tái)
i.在項(xiàng)目工程的Info.plist 中如圖增加 MOBAppKey 和 MOBAppSecret 兩個(gè)字段
在 MOBAppKey中?設(shè)置ShareSDK的appKey锻梳,MOBAppSecret中?設(shè)置ShareSDK的appSecret,如下圖:
ii.打開(kāi)*AppDelegate.m(*代表你的工程名字)導(dǎo)入頭文件
#import <ShareSDK/ShareSDK.h>
#import <ShareSDKConnector/ShareSDKConnector.h>
//騰訊開(kāi)放平臺(tái)(對(duì)應(yīng)QQ和QQ空間)SDK頭文件
#import <TencentOpenAPI/TencentOAuth.h>
#import <TencentOpenAPI/QQApiInterface.h>
//微信SDK頭文件
#import "WXApi.h"?
//新浪微博SDK頭文件
#import "WeiboSDK.h"
iii.在- (BOOL)application: didFinishLaunchingWithOptions:方法中調(diào)用registerActivePlatforms方法來(lái)初始化
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
? ? // Override point for customization after application launch.
? ? [ShareSDK registerActivePlatforms:@[
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? @(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:@"wx4868b35061f87885"
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? appSecret:@"64020361b8ec4c99936c0e3999a9f249"];
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? case SSDKPlatformTypeQQ:
? ? ? ? ? ? ? ? [appInfo SSDKSetupQQByAppId:@"100371282"
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? appKey:@"aed9b0303e3ed1e27bae87c33761161d"
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? authType:SSDKAuthTypeBoth];
? ? ? ? ? ? ? ? break;?
? ? ? ? ? ? ? default:
? ? ? ? ? ? ? ? break;
? ? ? ? }
? ? }];
? ? return YES;
}
(4)添加分享代碼
i.需要在分享的視圖中導(dǎo)入的頭文件
#import <ShareSDK/ShareSDK.h>
#import <ShareSDKUI/ShareSDK+SSUI.h>
ii.調(diào)用構(gòu)造分享參數(shù)接口和分享的接口
? ? //1净捅、創(chuàng)建分享參數(shù)
? ? NSMutableDictionary *shareParams = [NSMutableDictionary dictionary];
? ? [shareParams SSDKSetupShareParamsByText:@"分享內(nèi)容"
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? images:[[NSBundle mainBundle] pathForResource:@"COD13" ofType:@"jpg"]
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? url:[NSURL URLWithString:@"http://mob.com"]
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? title:@"分享標(biāo)題"
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? type:SSDKContentTypeAuto];
? ? //2疑枯、分享(可以彈出我們的分享菜單和編輯界面)
? ? [ShareSDK showShareActionSheet:nil //要顯示菜單的視圖, iPad版中此參數(shù)作為彈出菜單的參照視圖,只有傳這個(gè)才可以彈出我們的分享菜單蛔六,可以傳分享的按鈕對(duì)象或者自己創(chuàng)建小的view 對(duì)象荆永,iPhone可以傳nil不會(huì)影響
? ? ? ? ? ? ? ? ? ? ? ? ? ? items:nil
? ? ? ? ? ? ? ? ? ? ? shareParams:shareParams
? ? ? ? ? ? ? onShareStateChanged:^(SSDKResponseState state, SSDKPlatformType platformType, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error, BOOL end) {
? ? ? ? ? ? ? ? ? switch (state) {
? ? ? ? ? ? ? ? ? ? ? case SSDKResponseStateSuccess:
? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"分享成功"
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? message:nil
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? delegate:nil
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cancelButtonTitle:@"確定"
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? otherButtonTitles:nil];
? ? ? ? ? ? ? ? ? ? ? ? ? [alertView show];
? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? case SSDKResponseStateFail:
? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"分享失敗"
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? message:[NSString stringWithFormat:@"%@",error]
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? delegate:nil
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cancelButtonTitle:@"OK"
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? otherButtonTitles:nil, nil];
? ? ? ? ? ? ? ? ? ? ? ? ? [alert show];
? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? default:
? ? ? ? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? }
? ? ];
(5)配置平臺(tái)的URL Scheme
i.微信的URL Scheme的配置就是微信開(kāi)放平臺(tái)注冊(cè)應(yīng)用獲取得到的AppID,在URL Types中添加微信AppID 即可国章;
ii.微博的URL Scheme的配置就是微博開(kāi)放平臺(tái)注冊(cè)應(yīng)用獲取到的Appkey具钥,并在前面加wb前綴,格式為wb+AppKey液兽;
iii.QQ的URL Scheme的配置就是騰訊開(kāi)放平臺(tái)注冊(cè)應(yīng)用獲取到的AppID骂删,并且轉(zhuǎn)成十六進(jìn)制,另外在前面加QQ前綴四啰,格式為:QQ+ AppId的16進(jìn)制(如果appId轉(zhuǎn)換的16進(jìn)制數(shù)不夠8位則在前面補(bǔ)0宁玫,如轉(zhuǎn)換的是:5FB8B52,則最終填入為:QQ05FB8B52 柑晒,則最終填入為:QQ05FB8B52 注意:轉(zhuǎn)換后的字母要大寫)那么如何轉(zhuǎn)換的欧瘪,這個(gè)可以在網(wǎng)上找一個(gè)在線十進(jìn)制轉(zhuǎn)十六進(jìn)制的轉(zhuǎn)換器進(jìn)行轉(zhuǎn)換就可以,例如http://www.sojson.com/hexconvert.html
具體配置見(jiàn)下圖:
(6)配置平臺(tái)的白名單
在iOS 9下涉及到平臺(tái)客戶端跳轉(zhuǎn)匙赞,系統(tǒng)會(huì)自動(dòng)到項(xiàng)目info.plist下檢測(cè)是否設(shè)置平臺(tái)Scheme佛掖。對(duì)于需要配置的平臺(tái),如果沒(méi)有配置涌庭,就無(wú)法正常跳轉(zhuǎn)平臺(tái)客戶端芥被。因此要支持客戶端的分享和授權(quán)等,需要配置Scheme名單脾猛。
具體方法:
1)撕彤、在項(xiàng)目的info.plist中添加一LSApplicationQueriesSchemes鱼鸠,類型為Array猛拴。
2)、然后給它添加一個(gè)需要支持的項(xiàng)目蚀狰,類型為字符串類型愉昆;
各平臺(tái)OpenURL白名單說(shuō)明
新浪微博
sinaweibo
sinaweibohd
sinaweibosso
sinaweibohdsso
weibosdk
weibosdk2.5
微信
weixin
mqzoneopensdk,
mqzoneopensdkapi
mqzoneopensdkapi19
mqzoneopensdkapiV2
mqqOpensdkSSoLogin
mqqopensdkapiV2
mqqopensdkapiV3
wtloginmqq2
mqqapi
mqqwpa
mqzone
mqq
mqqopensdkapiV4
(7)另外一些相關(guān)配置
1)新浪微博,微信SDK都需要在項(xiàng)目的Build Settings中的Other Linker Flags添加”-ObjC”麻蹋,如果不配置有可能會(huì)崩潰跛溉。步驟如下: ?
2)新浪微博網(wǎng)頁(yè)授權(quán)分享需要暫時(shí)退回到http協(xié)議。步驟如下:
具體方法:
在項(xiàng)目的info.plist中添加一個(gè)Key:App Transport Security Settings,類型為字典類型芳室。
然后給它添加一個(gè)Key:Allow Arbitrary Loads专肪,類型為Boolean類型,值為YES堪侯;
3)新浪微博客戶端分享還需要在plist文件里添加隱私權(quán)限配置:相冊(cè)權(quán)限:Privacy - Photo Library Usage Description 嚎尤,如下圖:
以上就是完整的集成步驟,到這里就結(jié)束了伍宦!很簡(jiǎn)單的吧芽死!
效果如下:
Demo下載地址:https://github.com/fangli520/Share