由于分享的定制三痰,大部分需要我們自定義界面吧寺,只要調(diào)用對應(yīng)的接口就可,但是找了很多散劫,終于找到加上自己總結(jié)總結(jié)出以自定義分享為例稚机,來說下ShareSDK的分享步驟,以供參考获搏,讓大家少走一些彎路赖条。
1.導(dǎo)入SDK,導(dǎo)入對應(yīng)的庫(沒有Appkey,創(chuàng)建應(yīng)用申請AppKey)
2.AppDelegate中處理
首先纬乍,導(dǎo)入以下頭文件
#import#import//騰訊開放平臺(對應(yīng)QQ和QQ空間)SDK頭文件#import#import//微信SDK頭文件
#import "WXApi.h"
//新浪微博SDK頭文件
#import "WeiboSDK.h"
//新浪微博SDK需要在項目Build Settings中的Other Linker Flags添加"-ObjC"
其次碱茁,在AppDelegate中的didFinishLaunchingWithOptions:方法中寫入下面的代碼,替換對應(yīng)的參數(shù)(加粗字體表示的替換):如:以只有QQ仿贬,微信纽竣,新浪微博分享的為例
```
[ShareSDK registerApp:@"您在ShareSDK平臺注冊時的AppKey"
activePlatforms:@[
@(SSDKPlatformTypeWechat),
@(SSDKPlatformTypeQQ),
@(SSDKPlatformTypeSinaWeibo)]
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:@"您在新浪平臺注冊對應(yīng)應(yīng)用的AppKey"
appSecret:@"您在新浪平臺注冊對應(yīng)應(yīng)用的appSecret"
redirectUri:@"您的應(yīng)用分享后跳轉(zhuǎn)的地址"
authType:SSDKAuthTypeBoth];
break;
case SSDKPlatformTypeWechat:
[appInfo SSDKSetupWeChatByAppId:@"您在微信平臺注冊對應(yīng)應(yīng)用的AppId"
appSecret:@"您在微信平臺注冊對應(yīng)應(yīng)用的appSecret"];
break;
case SSDKPlatformTypeQQ:
[appInfo SSDKSetupQQByAppId:@"您在QQ平臺注冊對應(yīng)應(yīng)用的AppId"
appKey:@"您在QQ平臺注冊對應(yīng)應(yīng)用的appKey"
authType:SSDKAuthTypeBoth];
break;
default:
break;
}
}];
```
最后微信平臺分享成功后要回到微信應(yīng)用,粘貼下面的代碼
注意:看文檔的時候會發(fā)現(xiàn)茧泪,微信和QQ等平臺都要加入以下代碼蜓氨,但是只要有任一平臺加入以下代碼就可以了。并不沖突队伟。语盈。。
- (BOOL)application:(UIApplication *)application
handleOpenURL:(NSURL *)url
{
return [WXApi handleOpenURL:url delegate:self];
}
-(BOOL)application:(UIApplication *)application openURL:(nonnull NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(nonnull id)annotation {
return [WXApi handleOpenURL:url delegate:self];
}
3.各平臺UrlShcemes設(shè)置(QQ缰泡,微信刀荒,新浪微博)
按照順序進入到以下的界面:
分別在項目中添加對應(yīng)的UrlShcemes設(shè)置:
微信的UrlShcemes直接為微信的AppId
QQ的UrlShcemes為QQ+AppId的16進制
微博的UrlShcemes為 wb +AppId
4.適配iOS9之后的白名單設(shè)置
在info.plist 中右鍵Open As------->Source Code ,然后在對應(yīng)的位置復(fù)制以下代碼,粘貼上去:
LSApplicationQueriesSchemesweixinmqqmqqapimqqOpensdkSSoLoginmqqconnectmqqopensdkdatalinemqqopensdkgrouptribesharemqqopensdkfriendmqqopensdkapimqqopensdkapiV2mqqopensdkapiV3mqzoneopensdkwtloginmqqwtloginmqq2mqqwpamqzonemqzonev2mqzonesharewtloginqzonemqzonewxmqzoneopensdkapiV2mqzoneopensdkapi19mqzoneopensdkapimqqbrowsermttbrowser
簡書有問題棘钞,格式不對缠借,網(wǎng)上搜"iOS9分享白名單",加進去就OK了
6.在工程分享界面集成我們對應(yīng)的代碼
// 分享的參數(shù)設(shè)置
SSDKImage* urlImage = (SSDKImage *)[UIImage imageNamed:@"icon_banner"];
if (urlImage ==nil) {
return;
}
NSArray* imgArr = @[urlImage];
int shareType=0;
NSString *title ;
// 客戶端是否存在
BOOL isExists =NO;
// 自定義分享出處理
switch (button.tag) {
case 0:
{
shareType = SSDKPlatformSubTypeWechatSession;
title =@"微信好友";
([WXApi isWXAppInstalled] ==YES)? (isExists =YES) :(isExists =NO);
}
break;
case 1:
{
shareType = SSDKPlatformSubTypeWechatTimeline;
title =@"朋友圈";
([WXApi isWXAppInstalled] ==YES)? (isExists =YES) :(isExists =NO);
}
break;
case 2:
{
shareType = SSDKPlatformSubTypeQZone;
title =@"QQ空間";
([QQApiInterface isQQInstalled] ==YES)?(isExists =YES):(isExists=NO);
}
break;
case 3:
{
shareType = SSDKPlatformTypeSinaWeibo;
title =@"新浪微博";
}
break;
default:
break;
}
NSMutableDictionary* shareParams = [NSMutableDictionary dictionary];
[shareParams SSDKSetupShareParamsByText:@"分享給朋友應(yīng)用鏈接宜猜。泼返。。"
images:imgArr
url:[NSURL URLWithString:@"http://www.xxxx.com"]
title:title
type:SSDKContentTypeAuto];
WS(ws);
if (button.tag !=3) {
if (isExists) {
[shareParams SSDKEnableUseClientShare];
}else {
UIAlertController *alertVC =[UIAlertController alertControllerWithTitle:@"提示" message:@"該客戶端暫不存在" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *actionCancle =[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
[self dismissViewControllerAnimated:YES completion:nil];
}];
UIAlertAction *actionDownLoad =[UIAlertAction actionWithTitle:@"現(xiàn)在去下載" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"跳轉(zhuǎn)到對應(yīng)的App中");
if (button.tag ==0 || button.tag ==1) {
[ws loadAnyUrl:kLoadWechatUrl];
}else? if(button.tag ==2){
[ws loadAnyUrl:kLoadQQAppUrl];
}
}];
[alertVC addAction:actionCancle];
[alertVC addAction:actionDownLoad];
[self presentViewController:alertVC animated:YES completion:nil];
}
}
/*
調(diào)用shareSDK的無UI分享類型姨拥,
*/
[ShareSDK share:shareType parameters:shareParams onStateChanged:^(SSDKResponseState state, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error) {
switch (state) {
case SSDKResponseStateSuccess:
{
NSLog(@"分享成功绅喉!");
break;
}
case SSDKResponseStateFail:
{
NSLog(@"分享失敗叫乌!");
break;
}
default:
break;
}
}];
修改為我們對應(yīng)的參數(shù)柴罐,大功告成!
注意:分享的如果是鏈接憨奸,且含有圖片的時候革屠,如果鏈接不合法如以下2種情況:
1.鏈接直接為:空或者abc等字眼,也就是說不是http或者https打頭的鏈接排宰,默認(rèn)分享出來的效果只有一張對應(yīng)的圖片似芝,沒有鏈接
2.鏈接若為http或者https打頭的鏈接,但是實際不存在板甘,則顯示的為正常分享的鏈接党瓮,但是點開鏈接為請求網(wǎng)址不存在,注意盐类!
以上分享是以ShareSDK的3.5.0為例進行分享的寞奸,后續(xù)版本的設(shè)計可能會有出入:貼上對應(yīng)的網(wǎng)址:shareSDK官方分享文檔