在完成添加分享组件的 SDK 后,您还需要对工程进行配置,在初始化后即可开始使用分享组件。
本文将结合 分享官方 Demo 介绍如何在 10.1.60 及以上版本的基线中使用分享 SDK。
配置工程
配置第三方应用跳转白名单
iOS 9 及以上系统中,要支持应用的分享和授权等操作,需要配置 Scheme 名单。系统会自动到工程的 info.plist
下检测是否设置了应用的 Scheme,对于需要跳转的应用,如果没有配置,就无法正常跳转。
各渠道对应的 Value 如下:
微信:weixinULAPI、wechat、weixin。
微博:sinaweibohd、sinaweibo、weibosdk、weibosdk2.5。
支付宝:alipay、alipayShare。
QQ:mqq、mqqapi、mqqwpa、mqqOpensdkSSoLogin。
钉钉:dingtalk、dingtalk-open。
配置 URL Scheme
为保证可以从各渠道应用正确跳转回当前应用,需在当前工程的 Info.plist 文件中加入 urlScheme(从各分享渠道获取)。
微信回调源 App 的 scheme 均为分配的
key
微博的 scheme 为
"wb" + key
QQ 的 scheme 为
"tencent" + APPID
支付宝的 Identifier 为 alipayShare,scheme 为
'ap' + APPID
初始化设置
使用分享组件时,首先需要在对应第三方平台创建对应的应用信息,然后使用应用的信息进行注册(包括 appId,appSecret,universalLink 等信息),注册使用的方法如下所示。
使用 mPaaS 框架时
在 DTFrameworkInterface
的分类中实现下列方法,并在此方法中以词典的形式返回 key、secret 的值。
mPaaS SDK 版本 ≥ 10.1.60 开始,微信 SDK 已经更新到 1.8.6.1,需要进行 Universal Link 的校验,所以在配置密钥的同时需要配置对应的 Universal Link。
-(void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSDictionary *configDic = @{
@"weixin" : @{@"key":@"xxxxxxxxxxxxxx", @"secret":@"xxxxxxxxxxxxxxx", @"universalLink":@"https://mpaas.example.com/"},
@"weibo" : @{@"key":@"xxxxxxxxxx", @"secret":@"xxxxxxxxxxxxxxxxx"},
@"qq" : @{@"key":@"xxxxxxxxx", @"secret":@"xxxxxxxxxx"},
@"alipay": @{@"key":@"xxxxxxxxxxxxx"},/*该 key 对应的 bundleID 为"com.alipay.share.demo", 如需用来测试,请修改为自己申请的 key 或修改 bundleID 为"com.alipay.share.demo"*/
@"dingTalk": @{@"key":@"xxxxxxxxxxxxxxxx"}};
[APSKClient registerAPPConfig:configDic];
}
不使用 mPaaS 框架时
在接入应用的启动方法中注册密钥。
mPaaS SDK 版本 ≥ 10.1.60 开始,微信 SDK 已经更新到 1.8.6.1,需要进行 Universal Link 的校验,所以在配置密钥的同时需要配置对应的 Universal Link。
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSDictionary *dic = @{
@"weixin" : @{@"key":@"xxxxxxxxxxxxxx", @"secret":@"xxxxxxxxxxxxxxx",@"universalLink":@"https://mpaas.example.com/"},
@"weibo" : @{@"key":@"xxxxxxxxxx", @"secret":@"xxxxxxxxxxxxxxx"},
@"qq" : @{@"key":@"xxxxxxxxxx", @"secret":@"xxxxxxxxxxxxxx"},
@"alipay" : @{@"key":@"xxxxxxxxxxxxxxxx"},/*该 key 对应的 bundleID 为"com.alipay.share.demo", 如需用来测试,请修改为自己申请的 key 或修改 bundleID 为"com.alipay.share.demo"*/
@"dingTalk": @{@"key":@"xxxxxxxxxxxxxxxxxxx"}};
[APSKClient registerAPPConfig:dic];
}
基础功能
分享
唤起分享选择面板
在唤起分享面板时可以指定需要显示的渠道。
NSArray *channelArr = @[kAPSKChannelQQ, kAPSKChannelLaiwangContacts, kAPSKChannelLaiwangTimeline, kAPSKChannelWeibo, kAPSKChannelWeixin, kAPSKChannelCopyLink,kAPSKChannelDingTalkSession];
self.launchPad = [[APSKLaunchpad alloc] initWithChannels:channelArr sort:NO];
self.launchPad.delegate = self;
[self.launchPad showForView:[[UIApplication sharedApplication] keyWindow] animated:YES];
完成分享操作
在 @protocol APSKLaunchpadDelegate
的 sharingLaunchpad
回调中执行分享操作。
-(void)sharingLaunchpad:(APSKLaunchpad *)launchpad didSelectChannel:(NSString *)channelName
{
[self shareUrl:channelName];
[self.launchPad dismissAnimated:YES];
}
- (void)shareUrl:(NSString*)channelName
{
//生成数据,调用对应渠道分享
APSKMessage *message = [[APSKMessage alloc] init];
message.contentType = @"url";//类型分"text","image", "url"三种
message.content = [NSURL URLWithString:@"www.example.com.cn"];
message.icon = [UIImage imageNamed:@"1"];
message.title = @"标题";
message.desc = @"描述";
APSKClient *client = [[APSKClient alloc] init];
[client shareMessage:message toChannel:channelName completionBlock:^(NSError *error, NSDictionary *userInfo) {
//userInfo 为扩展信息
if(!error)
{
//your logistic
}
NSLog(@"error = %@", error);
}];
}
从渠道应用跳回的处理
当使用 mPaaS 框架时不需要处理,会由框架负责。
当不使用 mPaaS 框架时参照下列代码进行处理。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
//加入分享成功后,从渠道 APP 回到源 APP 的处理
BOOL ret;
ret = [APSKClient handleOpenURL:url];
return ret;
}
开放服务
通过第三方开发服务接口,可以调用第三方渠道分享 SDK 中提供的其他开放服务。目前支持的开放服务有 微信一次性订阅消息和 拉起微信小程序。
请求开放服务的操作流程
请求开放服务的操作流程如下:
// 1. 创建请求对象
APSKOpenServiceRequest *req = [APSKOpenServiceRequest new];
// 2. 设置请求类型
req.requestType = APSKOpenServiceRequestTypeLaunchMini;
// 3. 设置所需参数
MPSKLaunchMiniProgramParam *param = [[MPSKLaunchMiniProgramParam alloc] init];
param.userName = @"xxxxxxxx";
param.path = @"/index.html";
param.miniProgramType = MPSKWXMiniProgramTypeTest;
req.param = param;
// 4. 创建 client 对象
APSKClient *client = [APSKClient new];
// 5. 请求服务
[client requestOpenService:req toChannel:kAPSKChannelWeixin completionBlock:^(NSError *error, NSDictionary *userInfo) {
// 6. 回调
if (error) {
NSLog(@"%@", error);
}
}];
从渠道应用跳回的处理
从渠道应用跳回后,需要根据客户端是否采用 mPaaS 框架进行不同的处理。
如果客户端使用了 mPaaS 框架,在跳回后框架会负责处理。
如果客户端没有使用 mPaaS 框架,请您参照下列代码进行跳回后的处理。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
// 从渠道 APP 回到源 APP 的处理
BOOL ret;
ret = [APSKClient handleOpenURL:url];
return ret;
}