全部产品
云市场
云游戏

使用 SDK (版本 ≥ 10.1.60)

更新时间:2020-09-03 20:48:38

在完成添加分享组件的 SDK 后,您还需要对工程进行配置,在初始化后即可开始使用分享组件。本文将结合 分享 官方 Demo 介绍如何在 10.1.60 及以上版本的基线中使用分享 SDK。

配置工程

配置第三方应用跳转白名单

iOS 9 及以上系统中,要支持应用的分享和授权等操作,需要配置 Scheme 名单。系统会自动到工程的 info.plist下检测是否设置了应用的 Scheme,对于需要跳转的应用,如果没有配置,就无法正常跳转。1

配置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。
  1. - (void)application:(UIApplication *)application beforeDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  2. {
  3. NSDictionary *configDic = @{
  4. @"weixin" : @{@"key":@"wxc5c09c98c276ac86", @"secret":@"d56057d8a43031bdc178991f6eb8dcd5", @"universalLink":@"https://mpaas.demo.com/"},
  5. @"weibo" : @{@"key":@"1877934830", @"secret":@"1067b501c42f484262c1803406510af0"},
  6. @"qq" : @{@"key":@"1104122330", @"secret":@"WyZkbNmE6d0rDTLf"},
  7. @"alipay": @{@"key":@"2015060900117932"},/*该 key 对应的 bundleID 为"com.alipay.share.demo", 如需用来测试,请修改为自己申请的 key 或修改 bundleID 为"com.alipay.share.demo"*/
  8. @"dingTalk": @{@"key":@"dingoaa4aipzuf2yifw17s"}};
  9. [APSKClient registerAPPConfig:configDic];
  10. }

不使用 mPaaS 框架时

在接入应用的启动方法中注册密钥。

注意: mPaaS SDK 版本 ≥ 10.1.60 开始,微信SDK已经更新到1.8.6.1,需要进行 Universal Link 的校验,所以在配置密钥的同时需要配置对应的 Universal Link。
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
  2. {
  3. NSDictionary *dic = @{
  4. @"weixin" : @{@"key":@"wxc5c09c98c276ac86", @"secret":@"d56057d8a43031bdc178991f6eb8dcd5",@"universalLink":@"https://mpaas.demo.com/"},
  5. @"weibo" : @{@"key":@"1877934830", @"secret":@"1067b501c42f484262c1803406510af0"},
  6. @"qq" : @{@"key":@"1104122330", @"secret":@"WyZkbNmE6d0rDTLf"},
  7. @"alipay" : @{@"key":@"2015060900117932"},/*该 key 对应的 bundleID 为"com.alipay.share.demo", 如需用来测试,请修改为自己申请的 key 或修改 bundleID 为"com.alipay.share.demo"*/
  8. @"dingTalk": @{@"key":@"dingoaa4aipzuf2yifw17s"}};
  9. [APSKClient registerAPPConfig:dic];
  10. }

基础功能

分享

唤起分享选择面板

在唤起分享面板时可以指定需要显示的渠道。

  1. NSArray *channelArr = @[kAPSKChannelQQ, kAPSKChannelLaiwangContacts, kAPSKChannelLaiwangTimeline, kAPSKChannelWeibo, kAPSKChannelWeixin, kAPSKChannelCopyLink,kAPSKChannelDingTalkSession];
  2. self.launchPad = [[APSKLaunchpad alloc] initWithChannels:channelArr sort:NO];
  3. self.launchPad.delegate = self;
  4. [self.launchPad showForView:[[UIApplication sharedApplication] keyWindow] animated:YES];

完成分享操作

@protocol APSKLaunchpadDelegatesharingLaunchpad回调中执行分享操作。

  1. - (void)sharingLaunchpad:(APSKLaunchpad *)launchpad didSelectChannel:(NSString *)channelName
  2. {
  3. [self shareUrl:channelName];
  4. [self.launchPad dismissAnimated:YES];
  5. }
  6. - (void)shareUrl:(NSString*)channelName
  7. {
  8. //生成数据,调用对应渠道分享
  9. APSKMessage *message = [[APSKMessage alloc] init];
  10. message.contentType = @"url";//类型分"text","image", "url"三种
  11. message.content = [NSURL URLWithString:@"www.sina.com.cn"];
  12. message.icon = [UIImage imageNamed:@"1"];
  13. message.title = @"标题";
  14. message.desc = @"描述";
  15. APSKClient *client = [[APSKClient alloc] init];
  16. [client shareMessage:message toChannel:channelName completionBlock:^(NSError *error, NSDictionary *userInfo) {
  17. //userInfo 为扩展信息
  18. if(!error)
  19. {
  20. //your logistic
  21. }
  22. NSLog(@"error = %@", error);
  23. }];
  24. }

从渠道应用跳回的处理

  • 当使用 mPaaS 框架时不需要处理,会由框架负责
  • 当不使用 mPaaS 框架时参照下列代码进行处理
  1. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
  2. {
  3. //加入分享成功后,从渠道 APP 回到源 APP 的处理
  4. BOOL ret;
  5. ret = [APSKClient handleOpenURL:url];
  6. return ret;
  7. }

登录授权

目前支持登录授权的渠道:微信。

获取第三方渠道的授权code

仅通过第三方授权,获取授权的 auth code(auth code 用来换取 access token 以及 openId 等信息)。

  1. APSKClient *client = [[APSKClient alloc] init];
  2. [client getAuthCodeForChannel:kAPSKChannelWeixin completionHandler:^(NSError *error, NSString *code) {
  3. // 处理返回结果
  4. }];

获取授权用户信息

由于获取授权信息需要经过网络请求,请确认是否已经添加了组件 移动网关 组件。
分享组件提供两种方式来获取用户信息:

  • 客户端直接请求
  • 自定义方式,通过业务自己的服务获取用户数据
  1. - (void)getUserInfo {
  2. APSKClient *client = [[APSKClient alloc] init];
  3. [client requestAuthUserInfoForChannel:kAPSKChannelWeixin delegate:self];
  4. }
  5. /**
  6. 使用授权code组装自定义请求
  7. 自定义方式,通过业务自己的服务获取用户数据,如果不实现,则直接默认使用客户端发送请求
  8. @param code 授权code
  9. @return 自定义的请求对象
  10. */
  11. - (NSURLRequest *)customRequestWithAuthCode:(NSString *)code {
  12. // 自定义请求对象
  13. NSURLRequest *request;
  14. // ...
  15. return request;
  16. }
  17. /**
  18. 获取authcode之后,将要请求用户信息,可以处理UI操作
  19. 如不需要,可以不用实现
  20. @param channelName 当前授权的渠道
  21. */
  22. - (void)getUserInfoWillRequest:(NSString*)channelName {
  23. // 设置loading等操作
  24. }
  25. /**
  26. 获取到用户授权信息结果
  27. @param response 返回数据,包括用户信息和授权code,发生错误返回nil
  28. @param code 授权code
  29. @param error 错误信息
  30. @param channelName 当前授权渠道
  31. */
  32. - (void)getUserInfoDidFinishWithResponse:(NSDictionary *)response
  33. authCode:(NSString *)code
  34. error:(NSError*)error
  35. channel:(NSString*)channelName {
  36. // 处理返回结果,如果成功 response 中会包含授权的用户信息
  37. }

开放服务

通过第三方开发服务接口,可以调用第三方渠道分享 SDK 中提供的其他开放服务。目前支持的开放服务有 微信一次性订阅消息拉起微信小程序

请求开放服务的操作流程

请求开放服务的操作流程如下:

  1. // 1. 创建请求对象
  2. APSKOpenServiceRequest *req = [APSKOpenServiceRequest new];
  3. // 2. 设置请求类型
  4. req.requestType = APSKOpenServiceRequestTypeLaunchMini;
  5. // 3. 设置所需参数
  6. MPSKLaunchMiniProgramParam *param = [[MPSKLaunchMiniProgramParam alloc] init];
  7. param.userName = @"xxxxxxxx";
  8. param.path = @"/index.html";
  9. param.miniProgramType = MPSKWXMiniProgramTypeTest;
  10. req.param = param;
  11. // 4. 创建 client 对象
  12. APSKClient *client = [APSKClient new];
  13. // 5. 请求服务
  14. [client requestOpenService:req toChannel:kAPSKChannelWeixin completionBlock:^(NSError *error, NSDictionary *userInfo) {
  15. // 6. 回调
  16. if (error) {
  17. NSLog(@"%@", error);
  18. }
  19. }];

从渠道应用跳回的处理

从渠道应用跳回后,需要根据客户端是否采用 mPaaS 框架进行不同的处理。

  • 如果客户端使用了 mPaaS 框架,在跳回后框架会负责处理。
  • 如果客户端没有使用 mPaaS 框架,请您参照下列代码进行跳回后的处理。
  1. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
  2. {
  3. // 从渠道 APP 回到源 APP 的处理
  4. BOOL ret;
  5. ret = [APSKClient handleOpenURL:url];
  6. return ret;
  7. }