Flutter将视频或图文分享到抖音

如何在 Flutter 中分享视频到抖音

话不多说,先上效果:

原理

发布内容至抖音 H5 场景_移动/网站应用_抖音开放平台 (open-douyin.com)

  • 本教程没有接入抖音原生 SDK 以及任何第三方插件,使用抖音的 h5 分享接口配合 url_launcher 插件实现跳转至抖音分享页面
  • 需要分享的资源需要被部署在可被公开访问的服务器上,调用抖音的 h5 分享接口需提供被分享资源的 url
  • 需在自己的服务端进行签名计算,并将结果返回给前端,以供调用抖音的 api

步骤

  1. 抖音开放平台注册 app,拿到 client_keyclient_secret
  2. 生成 client_token
  3. 获取 open_ticket
  4. 在服务端计算签名
  5. 将需要的参数返回给前端
  6. Flutter 拿到从服务端获取的参数 + 视频/图文链接 拉起抖音 App 分享

前端实现

服务端计算签名的部分就不多说了,大家根据官网的教程来就好,返回给前端的数据结构类似这样的:

json 复制代码
{
// 服务端设置的 用于计算签名的 随机字符串
"nonceStr": "ae86",
// 签名
"signature": "665f1211738c4f348d093535e2ef93ac",
// 秒级时间戳
"timestamp": "1717054967",
// 分享类型 默认 h5
"shareType": "h5",
"clientKey": "ztfqxgipi39ko49q"
}

前端生成 分享 schema,并调起分享代码:

dart 复制代码
  Future<void> douyinShare({
    // 图片列表
    List<String> images = const [],
    // 视频 url
    String? videoUrl = "",
    // 自定义标签
    List<String> tagList = const [],
    // 标题
    required String title,
  }) async {
    Response response = await dio.get('/<获取签名接口>');

    final Map<String, dynamic> param = {
      'title': title,
      'client_key': response.data['clientKey'],
      'nonce_str': response.data['nonceStr'],
      'signature': response.data['signature'],
      'timestamp': response.data['timestamp'],
      'share_type': response.data['h5'],
      // 1-直接跳转到发布页 0-跳转到编辑页
      'share_to_publish': '1',
    };

    // 标签
    param['hashtag_list'] = json.encode(['自定义标签', '自定义标签2', ...tagList]);

    // 向 param 中添加图片或视频
    if (images.isNotEmpty) {
      if (images.length > 1) {
        param['image_list_path'] = json.encode(images);
      } else {
        param['image_path'] = images.first;
      }
    } else if (videoUrl != "") {
      param['video_path'] = videoUrl;
    } else {
      // error handle
    }

    // 固定写法
    final Uri url = Uri(
      scheme: 'snssdk1128',
      host: 'openplatform',
      path: 'share',
      queryParameters: param,
    );

    if (await canLaunchUrl(url)) {
      await launchUrl(url);
    }
  }

上述代码只展示了核心逻辑,至于具体的实现就请各位自行决断,例如 错误处理Util 工具类单例模式 等等...

IOS 需要添加应用白名单

抖音的 ApplicationQueriesScheme 为: snssdk1128

ios/info.plist 文件中加入

xml 复制代码
<key>LSApplicationQueriesSchemes</key>
<array>
	<string>snssdk1128</string> <!-- 抖音 -->
	...
</array>

相关推荐
亚历克斯神6 小时前
Flutter for OpenHarmony: Flutter 三方库 mutex 为鸿蒙异步任务提供可靠的临界资源互斥锁(并发安全基石)
android·数据库·安全·flutter·华为·harmonyos
钛态6 小时前
Flutter 三方库 smartstruct 鸿蒙化字段映射适配指南:介入静态预编译引擎扫除视图及数据模型双向强转类型错乱隐患,筑稳如磐石的企业级模型治理防线-适配鸿蒙 HarmonyOS ohos
flutter·华为·harmonyos
键盘鼓手苏苏6 小时前
Flutter 组件 csv2json 适配鸿蒙 HarmonyOS 实战:高性能异构数据转换,构建 CSV 流式解析与全栈式数据映射架构
flutter·harmonyos·鸿蒙·openharmony
左手厨刀右手茼蒿6 小时前
Flutter 组件 http_requests 适配鸿蒙 HarmonyOS 实战:极简网络请求,构建边缘端轻量级 RESTful 通讯架构
网络·flutter·http
雷帝木木6 小时前
Flutter 三方库 hrk_logging 的鸿蒙化适配指南 - 实现标准化分层日志记录、支持多目的地输出与日志分级过滤
flutter·harmonyos·鸿蒙·openharmony·hrk_logging
左手厨刀右手茼蒿6 小时前
Flutter 三方库 dio_compatibility_layer 的鸿蒙化适配指南 - 实现 Dio 跨主版本的平滑迁移、支持遗留拦截器兼容与网络请求架构稳定升级
flutter·harmonyos·鸿蒙·openharmony·dio_compatibility_layer
雷帝木木6 小时前
Flutter 三方库 hashids2 基于鸿蒙安全内核的深度隐匿映射适配:数字指纹泄露防御层、生成短小精悍唯一不可逆加盐哈希,护航全链路请求 URL 隐私-适配鸿蒙 HarmonyOS ohos
安全·flutter·harmonyos
王码码20359 小时前
Flutter 组件 inappwebview_cookie_manager 适配 鸿蒙Harmony 实战 - 驾驭核心大 Web 容器缓存隧道、构建金融级政企应用绝对防串号跨域大隔离基座
flutter·harmonyos·鸿蒙·openharmony·inappwebview_cookie_manager
左手厨刀右手茼蒿9 小时前
Flutter 组件 ews 的适配 鸿蒙Harmony 实战 - 驾驭企业级 Exchange Web Services 协议、实现鸿蒙端政企办公同步与高安通讯隔离方案
flutter·harmonyos·鸿蒙·openharmony
钛态9 小时前
Flutter 三方库 react 泛前端核心范式框架鸿蒙原生层生态级双向超能适配:跨时空重塑响应式单向数据流拓扑与高度精密生命周期树引擎解耦视图渲染控制中枢(适配鸿蒙 HarmonyOS ohos)
前端·flutter·react.js