# **1、iOS SDK集成说明**
## 商户APP集成抖音支付SDK

1. **通过CocoaPods集成**
      1. 在工程的 Podfile 里面添加以下代码：

```Bash
# 添加火山引擎 iOS CocoaPods 仓库
source 'https://github.com/volcengine/volcengine-specs.git'

# 添加抖音支付SDK Pod 库依赖
pod 'DypaySDK'
```

    保存并执行 pod install，成功后，用后缀为 .xcworkspace 的文件打开工程。
    **注意：**
    命令行下执行 pod install，如果有错误提示 DypaySDK 版本不是最新的，则先执行 pod repo update 操作更新本地 repo 的内容，然后再执行 pod install。

      2. 在 pod install 成功、打开工程后，编译工程并链接，如果遇到 "ld: Undefined symbols: _sqlite3_bind_blob, referenced from: " 这样的错误，请在 Xcode 中，选择你的工程设置项，选中 "TARGETS" 一栏，找到 "General" 标签栏下的 "Frameworks, Libraries, and Embedded Content" ，在列表中检查有没有 libsqlite3.tbd 这一项。如果没有，点击下面的 "+" 按钮，

<div style="text-align: center"><img src="https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/9ae3e78c83dd467c9dbfa812068fadf9~tplv-goo7wpa0wc-image.image" width="2046px" /></div>

    然后输入 "sqlite3" 搜索，选择 libsqlite3.tbd 添加库依赖。
![Image](https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/2599ae6ebb0f4742a64b609a1eed6383~tplv-goo7wpa0wc-image.image)
同理再依次检查libz.tbd、WebKit.framework是否有添加库依赖。libsqlite3.tbd、libz.tbd、WebKit.framework，这三个库依赖是必须要添加的


2. **配置 scheme**
      1. 唤起抖音 scheme 配置

在Xcode中，选择你的工程设置项，选中 "TARGETS" 一栏，在 "info" 标签栏下的 "Custom iOS Target Properties"里，找到 "Queried URL Schemes"（如果没有则添加），新增 **dypay1128**（用于唤起抖音）、**dypay2329**（用于唤起抖音极速版）、**dypay8663**（用于唤起抖音火山版），如下图中的红色箭头处所示：
<div style="text-align: center"><img src="https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/114e91b6155a44dfac7ab6cc74a8f913~tplv-goo7wpa0wc-image.image" width="2278px" /></div>

    在 iOS 15 系统上，使用 Xcode 13 编译出的App，LSApplicationQueriesSchemes 的数量会限制为 50 个，所以第50个之后的 scheme 配置会不生效，需要确保 "dypay1128"、"dypay2329" 、"dypay8663"配置在LSApplicationQueriesSchemes 的前 50 个。

      2. 回传支付结果 scheme 配置：

    商户在[抖音开放平台](https://douyinpay.com/)申请开发 APP 应用后，抖音开放平台会生成 APP 的唯一标识 APPID。在 Xcode 中打开项目，选中 "TARGETS" 一栏，在 "info" 标签栏下的 "URL Types" 下，新增 URL Scheme 配置 ，如下图中的红色箭头处所示（下图中 dy88888888 为示例 APPID，请勿真实使用。Identifier 处可以填写 dypayResult ）。
<div style="text-align: center"><img src="https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/87348ac1a5d04c6eb5f5ee463e3e12b6~tplv-goo7wpa0wc-image.image" width="2046px" /></div>

## 注册 APPID

1. 在你需要使用抖音支付 SDK API 的文件中 import DypayAPI.h 头文件。

```Objective-C
#import <DypaySDK/DypayAPI.h>
```


2. 商户APP工程中集成抖音支付 SDK 后，调用API前，需要先调用 registerWithAppID 注册你的 APPID 和回调 scheme，代码如下：

```Objective-C
// 获取回调 schema，有两种方式，二选一：
// 第一种，直接填写在抖音开放平台注册的APPID ：
NSString *dypayScheme = @""; // 在抖音开放平台注册的APPID，示例dy88888888

// 第二种，获取项目中的回传支付结果 scheme 配置
NSArray *URLTypeArray = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleURLTypes"]; 
for (NSDictionary *anURLType in URLTypeArray) { 
    if ([[anURLType objectForKey:@"CFBundleURLName"] isEqualToString:@"dypayResult"]) { 
        dypayScheme = [[anURLType objectForKey:@"CFBundleURLSchemes"] objectAtIndex:0]; 
        break; 
    } 
} 
 
// 将该APP注册到抖音支付 
[DypayAPI registerWithAppID:dypayScheme  
          callbackScheme:[NSString stringWithFormat:@"%@://dypay", dypayScheme]];
```

提示：
在调用 registerWithAppID 前，可以**使用 SDK 对外暴露的日志记录能力 logBlock**，帮助你排查 SDK 运行过程中的问题。
```Objective-C
[DypayAPI sharedDypayAPI].logBlock = ^(DypayLogLevel level, 
                                       NSTimeInterval timestamp, 
                                       NSString *tag, 
                                       NSString *message) {
    // 记录日志：级别、时间戳、Tag、消息体
    
};
```

## 使用Universal Links回跳商户APP
注册处新增参数Universal Links，传入你的Universal Links，用作抖音回跳使用。另外还需要传callbackScheme，在不支持Universal Links的低抖音版本下可降级到scheme回跳。
```Objective-C
[DypayAPI registerWithAppID:appId 
              universalLink:@"https://your.universallink.com/app/" 
             callbackScheme:[NSString stringWithFormat:@"%@://dypay", dypayScheme]];
```

抖音回跳到商户APP时会触发如下代理，需要增加`DypayAPI processDypayResultWithUniversalLink:`来进行处理支付结果
```Objective-C
- (BOOL)application:(UIApplication *)application 
continueUserActivity:(NSUserActivity *)userActivity 
  restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler{
  [DypayAPI processDypayResultWithUserActivity:userActivity callback:^(NSDictionary * _Nonnull resultDic) {
        // 在这里处理回调信息
  }];
}
```

适配了SceneDelegate的APP可以使用下面的方式
```Objective-C
- (void)scene:(UIScene *)scene continueUserActivity:(NSUserActivity *)userActivity {
  [DypayAPI processDypayResultWithUserActivity:userActivity callback:^(NSDictionary * _Nonnull resultDic) {
        // 在这里处理回调信息
  }];
}
```


# 2、Android SDK集成说明
通过gradle的方式引入

1. 添加抖音支付的maven仓库

```Groovy
maven {
  url "https://artifact.bytedance.com/repository/Volcengine"
 }
```


2. 添加抖音支付sdk的依赖

```Groovy
implementation "com.bytedance.caijing:dy-pay-sdk-tob:+"
```


# 3、HarmonyOS SDK集成说明
## **通过ohpm在线集成**
### 添加抖音支付openSDK的火山源
```Shell
ohpm config set registry https://ohpm.openharmony.cn/ohpm/,http://artifact.bytedance.com/repository/byted-ohpm/
```

### oh-package.json中添加版本依赖
```JSON
{
  "name": "entry",
  "version": "1.1.0",
  "description": "Please describe the basic information.",
  "main": "",
  "author": "",
  "license": "",
  "dependencies": {
    "@douyin/dypay_open_sdk": "1.1.0",
  }
}
```

## **通过离线har包接入**
```JSON
{
  "name": "@xxx/xxx",
  "version": "1.1.0",
  "description": "Please describe the basic information.",
  "main": "Index.ets",
  "author": "",
  "license": "Apache-2.0",
  "dependencies": {
    "dypay_open_sdk": "file:./libs/dypay_open_sdk.har",
  }
}
```

## 配置
entry目录下的module.json5中querySchemes里新增ttcjpay，用来判断抖音是否安装
```Bash
{
  "module": {
    "name": "entry",
    "type": "entry",
    "description": "$string:module_desc",
    "mainElement": "EntryAbility",
    "deviceTypes": [
      "phone",
      "tablet",
      "2in1"
    ],
    "deliveryWithInstall": true,
    "installationFree": false,
    "pages": "$profile:main_pages",
    "abilities": [],
    "requestPermissions": [],
    "extensionAbilities": [],
    "querySchemes": [
      "ttcjpay",
      "dypay1128",
      "dypay2329",
      "dypay8663"
    ]
  }
}
```

# 4、检测抖音端是否存在能力
抖音支付OpenSDK提供api能力，供商户调用查询「抖音、抖音极速版、抖音火山版」是否存在。
> 判断逻辑不仅包含是否安装对应APP，同时耦合了版本限制。因此商户测试时，需要确保为商店最新抖音版本。

## iOS调用方法
```Objective-C
// 依赖商户app把"dypay1128"、"dypay2329" 配置在LSApplicationQueriesSchemes 的前 50 个
/**
 * 支付单例
 *
 * @return 返回bool true-可用，false-不可用
 */
[DypayAPI canOpenDypay];
```

## Android调用方法
```Kotlin
/**
 * 抖音app是否可用
 *
 * @param context
 * @return true-可用，false-不可用
 */
DyPay(activity).isDypayAppUsable(context)
```

## HarmonyOS 调用方法
```TypeScript
// 依赖商户app在module.json5中的querySchemes里新增ttcjpay的配置
/** 
 * 抖音app是否可用 
 * 
 * @return true-可用，false-不可用 
 */
 
DypayAPI.canOpenDypay()
```

# 5、APP调起支付
具体参考：[App调起支付](https://pay.douyinpay.com/wiki/639fd48f17c2f3021d237f61/639fd5e470f838021f2961e5)
# 6、离线包下载
iOS：
<a href="https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/33d7b08001b94089b0385f18fc179e73~tplv-goo7wpa0wc-image.image" filename="DypaySDK_1.1.0.4.zip" download>DypaySDK_1.1.0.4.zip</a>
Android：
<a href="https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/01f79de2e3354f1fa55e6f5d24be43ba~tplv-goo7wpa0wc-image.image" filename="dy-pay-sdk-tob-1.1.0.9.aar" download>dy-pay-sdk-tob-1.1.0.9.aar</a>
HarmonyOS：
<a href="https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/55c41b34921e4b5dbc5b3fb303600e45~tplv-goo7wpa0wc-image.image" filename="dypay_open_sdk-1.1.3.har" download>dypay_open_sdk-1.1.3.har</a>


# 7、demo工程下载
iOS接入抖音支付demo工程：
<a href="https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/f89ddb1da07c48d3acb916f7a93bf8b5~tplv-goo7wpa0wc-image.image" filename="demo_for_outer.zip" download>demo_for_outer.zip</a>
Android接入抖音支付demo工程：
<a href="https://p9-arcosite.byteimg.com/tos-cn-i-goo7wpa0wc/d204bffdef2f458882394f64faa93e03~tplv-goo7wpa0wc-image.image" filename="DyPayDemo.zip" download>DyPayDemo.zip</a>



# 8、OpenSDK版本信息
| **版本号** | **更新说明** | **更新时间** |
| --- | --- | --- |
| 1.1.4 | 1. Harmony单端更新 <br> 2. 功能完善 | 2026-08-06 |
| 1.1.0.9 | 1. Android单端更新 <br> 2. 功能完善 | 2026/07/20 |
| 1.1.0.7 | 1.  Android单端更新 <br> 2. 提升Android唤端稳定性 | 2026/06/12 |
| 1.1.0.6 | 1.  Android单端更新 <br> 2. 提升Android唤端稳定性 | 2026/05/11 |
| 1.1.0.5 | 1.  Android单端更新 <br> 2. 提升Android唤端稳定性 | 2026/03/24 |
| 1.1.0.4 | 1. 双端更新 <br> 2. 提升双端唤端稳定性 | 2026/02/11 |
| 1.1.0.3 | 1. iOS单端更新 <br> 2. 提升iOS唤端稳定性 | 2025/12/08 |
| 1.1.0.2 | 1. iOS单端更新 <br> 2. 提升iOS唤端稳定性 | 2025/11/21 |
| 1.1.0.1 | 1. iOS单端更新 <br> 2. 提升iOS唤端稳定性 | 2025/10/24 |
| 1.1.0 | 1. 提升三端唤端稳定性 | 2025/10/14 |
| 1.0.9.3 | 1.  Android单端更新 <br> 2. 提升Android唤端稳定性 | 2025/07/15 |
| 1.0.0 | 1. HarmonyOS支持，版本为1.0.0 | 2025/07/01 |
| 1.0.9.2 | 1. 双端更新 <br> 2. 提升双端唤端稳定性 | 2025/6/26 |
| 1.0.9.1 | 1. iOS单端更新 <br> 2. 提升 iOS唤端稳定性 | 2025/6/18 |
| 1.0.9 | 1.  Android单端更新 <br> 2. 提升Android唤端稳定性 | 2025/05/07 |
| 1.0.8.3 | 1. iOS单端更新 <br> 2. 提升iOS唤端稳定性 | 2024/12/12 |
| 1.0.8.1 | 1. iOS单端更新 <br> 2. 提升iOS唤端稳定性 | 2024/10/29 |
| 1.0.8 | 1. iOS单端更新 <br> 2. 提升iOS唤端稳定性 | 2024/10/26 |
| 1.0.7.8 | 1. iOS单端更新 <br> 2. 解决一些冲突问题 | 2024/10/22 |
| 1.0.7.7 | 1. iOS单端更新 <br> 2. 提升iOS唤端稳定性 | 2024/09/14 |
| 1.0.7.5 | 1. iOS单端更新 <br> 2. 提升了framework版本，新增universallink唤端能力 | 2024/08 |
| 1.0.7.4 | 1. Android单端更新 <br> 2. 提升Android唤端稳定性 | 2024/11/15 |
| 1.0.7.8 | 1. iOS单端更新 <br> 2. 提升iOS唤端稳定性 | 2024/09/03 |
| 1.0.7.2 | 1. Android单端更新 <br> 2. 提升Android唤端稳定性 | 2024/09/03 |
| 1.0.7.1 | 1. 双端体验优化，适配横竖屏模式 <br> 2. 修复了一些稳定性问题 | 2024/08/27 |
| 1.0.7 | 1. iOS唤端优化，提升唤端性能 <br> 2. 双端稳定性优化 | 2024/07/29 |
| 1.0.6.1 | 1. 修复了一些稳定性问题 | 2024/07/09 |
| 1.0.6 | 1. iOS支持苹果隐私协议声明 <br> 2. 双端支持唤起「抖音火山版」，支持唤起抖音火山版30.6.0及以上版本 <br>  <br> 备注：opensdk会根据用户装端情况，按照以下优先级依次尝试拉起：抖音>抖音极速版>抖音火山版 | 2024/07/01 |
| 1.0.5.1 | 仅安卓升级至1.0.5.1 小版本，修复了一些兼容性问题 | 2024/06/13 |
| 1.0.5 | iOS <br>  <br> * 兼容性升级 <br>  <br> Android <br>  <br> * 兼容性升级 | 2024/06/12 |
| 1.0.4 | iOS <br>  <br> * 发起支付API支持回调支付结果 <br> * pay_source改为非必传参数 <br>  <br> Android <br>  <br> * 逻辑优化，性能升级 | 2024/05/27 |
| 1.0.2 | iOS&Android <br>  <br> * 逻辑优化，性能升级 | 2024/04/15  |
## 
