在完成添加分享组件的 SDK 后,您还需要对工程进行配置,在初始化后即可开始使用分享组件。

本文将结合 分享官方 Demo 介绍如何在 10.1.60 及以上版本的基线中使用分享 SDK。

配置工程

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

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

p3.png

各渠道对应的 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;
  }