由于分享的定制,大部分需要我们自定义界面,只要调用对应的接口就可,但是找了很多,终于找到加上自己总结总结出以自定义分享为例,来说下ShareSDK的分享步骤,以供参考,让大家少走一些弯路。
1.导入SDK,导入对应的库(没有Appkey,创建应用申请AppKey)
2.AppDelegate中处理
首先,导入以下头文件
#import#import//腾讯开放平台(对应QQ和QQ空间)SDK头文件#import#import//微信SDK头文件
#import "WXApi.h"
//新浪微博SDK头文件
#import "WeiboSDK.h"
//新浪微博SDK需要在项目Build Settings中的Other Linker Flags添加"-ObjC"
其次,在AppDelegate中的didFinishLaunchingWithOptions:方法中写入下面的代码,替换对应的参数(加粗字体表示的替换):如:以只有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:
//设置新浪微博应用信息,其中authType设置为使用SSO+Web形式授权
[appInfo SSDKSetupSinaWeiboByAppKey:@"您在新浪平台注册对应应用的AppKey"
appSecret:@"您在新浪平台注册对应应用的appSecret"
redirectUri:@"您的应用分享后跳转的地址"
authType:SSDKAuthTypeBoth];
break;
case SSDKPlatformTypeWechat:
[appInfo SSDKSetupWeChatByAppId:@"您在微信平台注册对应应用的AppId"
appSecret:@"您在微信平台注册对应应用的appSecret"];
break;
case SSDKPlatformTypeQQ:
[appInfo SSDKSetupQQByAppId:@"您在QQ平台注册对应应用的AppId"
appKey:@"您在QQ平台注册对应应用的appKey"
authType:SSDKAuthTypeBoth];
break;
default:
break;
}
}];
```
最后微信平台分享成功后要回到微信应用,粘贴下面的代码
注意:看文档的时候会发现,微信和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设置(QQ,微信,新浪微博)
按照顺序进入到以下的界面:
分别在项目中添加对应的UrlShcemes设置:
微信的UrlShcemes直接为微信的AppId
QQ的UrlShcemes为QQ+AppId的16进制
微博的UrlShcemes为 wb +AppId
4.适配iOS9之后的白名单设置
在info.plist 中右键Open As------->Source Code ,然后在对应的位置复制以下代码,粘贴上去:
LSApplicationQueriesSchemesweixinmqqmqqapimqqOpensdkSSoLoginmqqconnectmqqopensdkdatalinemqqopensdkgrouptribesharemqqopensdkfriendmqqopensdkapimqqopensdkapiV2mqqopensdkapiV3mqzoneopensdkwtloginmqqwtloginmqq2mqqwpamqzonemqzonev2mqzonesharewtloginqzonemqzonewxmqzoneopensdkapiV2mqzoneopensdkapi19mqzoneopensdkapimqqbrowsermttbrowser
简书有问题,格式不对,网上搜"iOS9分享白名单",加进去就OK了
6.在工程分享界面集成我们对应的代码
// 分享的参数设置
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:@"分享给朋友应用链接。。。"
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:@"现在去下载" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"跳转到对应的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];
}
}
/*
调用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;
}
}];
修改为我们对应的参数,大功告成!
注意:分享的如果是链接,且含有图片的时候,如果链接不合法如以下2种情况:
1.链接直接为:空或者abc等字眼,也就是说不是http或者https打头的链接,默认分享出来的效果只有一张对应的图片,没有链接
2.链接若为http或者https打头的链接,但是实际不存在,则显示的为正常分享的链接,但是点开链接为请求网址不存在,注意!
以上分享是以ShareSDK的3.5.0为例进行分享的,后续版本的设计可能会有出入:贴上对应的网址:shareSDK官方分享文档
网友评论