Flutter TikTok API集成插件tiktok_api的使用

Flutter TikTok API集成插件tiktok_api的使用

<code>tiktok_api</code>项目开发了一个开源的Flutter插件库,用于与TikTok的API进行集成。该项目提供了更简单的方式来集成TikTok,因为根据TikTok的文档和支持,直接集成可能不会成功。

这个项目是免费的,但您可以"buy me a coffee"支持作者。

特性

  • (WIP) 集成Android
  • (alpha) 集成iOS
  • (计划中) 集成Web

要求

  • Flutter版本 3.x.x
  • Dart版本 3.x.x
  • 一个网络服务器来存储App Link(Android)配置文件
  • 一个网络服务器来存储Universal Link(iOS)配置文件
  • 一个后端服务器来交换TikTok的授权码(登录成功后)与TikTok的访问令牌

开发状态

此项目仍在开发中。

Demo

入门指南

  1. TikTok开发者网站上创建一个应用。
  2. 添加Login Kit产品并为Android配置Login Kit。同时为iOS配置Login Kit。如果遇到重定向URI错误,可以在Login Kit的重定向URI末尾添加斜杠,例如:https://www.abc.com/login-callback/
  3. 为Android配置App Link(可以使用Uni Links包)并测试App Link是否正常工作。
  4. 为iOS配置Universal Link(可以使用Uni Links包)并测试Universal Link是否正常工作。
  5. 配置您的TikTok应用的范围。可以从user.info.basic开始。
  6. 提交您的应用,并确保状态为Live in Production
  7. 安装此插件包 flutter pub add tiktok_api
  8. 调用setup()方法并传递您的TikTok应用客户端密钥:_tiktokSDKApi.setup('<API_KEY>')
  9. 调用login()方法并传递范围:_tiktokSDKApi.login(['user.info.basi'], 'https://www.abc.com/login-callback/', browserAuthEnabled)
  10. 一旦用户授权了您的TikTok应用,那么TikTok登录工具包将通过App Link(Android)或Universal Link(iOS)重定向回您的应用。您的任务是处理App Link或Universal Link的重定向(上述步骤3),并检索授权码。您必须使用此授权码与访问令牌进行交换。一旦获取到访问令牌,就可以使用它调用所有TikTok的API。此交换过程必须在后端进行。您可以参考TikTok的文档来获取访问令牌在这里

您可以在example文件夹中查看如何使用此插件库的示例代码。

行为准则

请参阅我们的行为准则文档以了解社区指南。

开发者指南

顺序图

有两个阶段。首先,我们必须做一些设置以便能够与原生侧通信。然后我们继续登录TikTok并向用户请求授权信息范围。一旦用户授权,我们就必须使用授权码换取访问令牌。访问令牌将包含模仿凭据和范围。一旦我们获得访问令牌,就可以使用它调用所有TikTok API。

设置阶段
sequenceDiagram
  Flutter App ->> Pigeon Host on Dart's side: setup()
  Pigeon Host on Dart's side ->> Pigeon Host on iOS/Android side: setup()
  Pigeon Host on iOS/Android side ->> Tiktok SDK: setup()
获取访问令牌
sequenceDiagram
  Flutter App ->> uni_link: setup App Link/Universal Link()
  Flutter App ->> Pigeon Host on Dart's side: login()
  Pigeon Host on Dart's side ->> Pigeon Host on iOS/Android side: login()
  Pigeon Host on iOS/Android side ->> Tiktok SDK: login()
  par Login Response and Web Browser running in parallel
    Tiktok SDK --> Pigeon Host on iOS/Android side: response{verifier, etc}
    Pigeon Host on iOS/Android side --> Pigeon Host on Dart's side: response{verifier, etc}
    Pigeon Host on Dart's side --> Flutter App: response{verifier, etc}
    Flutter App ->> Flutter App: save response{verifier, etc} and wait for uni_link callback
  and    
    par Web Browser Opening and the app put to background in parallel
      Native OS ->> Flutter App: put on background
    and
      
      Tiktok SDK ->> Web Browser: open Tiktok's Login site      
      Web Browser ->> Web Browser: succesful login
      Web Browser --> Native OS: App Link or Universal Link callback {Authorization Code}
      Native OS ->> Flutter App: put on foreground

      Flutter App --> Native OS: foreground success

      Native OS --> uni_link: App Link or Universal Link callback {Authorization Code}
      uni_link --> Flutter App: Retrieve Authorization Code from App Link/Universal Link
      Flutter App ->> Backend Server: exchange token {verifier, Authorization Code}
      Backend Server ->> Tiktok API: exchange token {verifier, Authorization Code}
      Tiktok API --> Backend Server: access token
      Backend Server --> Flutter App: access token
    end
  end
开发

我们使用Flutter的<a href="https://pub.dev/packages/pigeon">pigeon</a>包为我们提供双向通信所需的基础架构。

  1. 我们定义了我们的pigeon.dart文件。包含代码生成器的配置、消息数据结构和主机接口。
  2. 运行dart run pigeon --input pigeon.dart,pigeon将生成所有所需的通信基础架构以及主机接口的实现。
  3. 设置原生侧主机实现。
  4. 在Dart的一侧实例化主机接口实现,并对原生一侧进行远程调用。

示例代码

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:tiktok_api/tiktok_api.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _tiktokApiPlugin = TiktokApi();

  [@override](/user/override)
  void initState() {
    super.initState();

    /// Step 1. Call the setup and passed the client key (this is applies to Android only)
    _tiktokApiPlugin.setup('<YOUR_TIKTOK_APP_CLIENT_KEY>');
  }

  // Platform messages are asynchronous, so we initialize in an async method.

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: TextButton(
            child: const Text('Login to Tikok'),
            onPressed: () async {
              /// Step 2. Call login and passed the scopes and redirect uri
              final result = await _tiktokApiPlugin.login(['user.info.basic'], '<YOUR_TIKTOK_APP_REDIRECT_URI>', true);

              /// Step 3. Store the code verifier, we will need this later on for getting the access token
              final codeVerifier = result.codeVerifier!;

              /// Step 4. Tiktok will redirect to your app redirect_uri and you can retrieve the code from the query string.
              /// You have to use App Link or Universal Link to make sure the OS can redirect to your app.
              /// Below is an example using uni_link package
              /*
              if(link.startsWith('<REDIRECT_URI>')){
                final authCode = link.replaceAll("<REDIRECT_URI>?code=", "");

                /// Once we got the authCode we can exchange it with the access token
                /// Read more here: https://developers.tiktok.com/doc/oauth-user-access-token-management
                
              } 
              */

            },
          ),
        ),
      ),
    );
  }
}

更多关于Flutter TikTok API集成插件tiktok_api的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter TikTok API集成插件tiktok_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


要在Flutter应用中集成TikTok API,你可以使用 tiktok_api 插件。这个插件提供了与TikTok API的交互功能,允许你获取用户信息、视频数据等。

以下是如何在Flutter项目中使用 tiktok_api 插件的步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 tiktok_api 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  tiktok_api: ^版本号

请将 ^版本号 替换为最新的 tiktok_api 插件版本号。

2. 导入插件

在需要使用TikTok API的Dart文件中导入 tiktok_api 插件。

import 'package:tiktok_api/tiktok_api.dart';

3. 初始化 TikTok API

在使用 API 之前,你需要初始化 TikTokApi 实例。通常需要提供 TikTok 的 API Key 或者其他认证信息。

final tiktokApi = TikTokApi(apiKey: 'YOUR_TIKTOK_API_KEY');

4. 调用 API 方法

tiktok_api 插件提供了多种方法来与 TikTok API 进行交互。以下是一些常见的用法示例:

获取用户信息

final userInfo = await tiktokApi.getUserInfo('USER_ID');
print(userInfo);

获取用户视频列表

final userVideos = await tiktokApi.getUserVideos('USER_ID');
print(userVideos);

获取视频信息

final videoInfo = await tiktokApi.getVideoInfo('VIDEO_ID');
print(videoInfo);

获取热门视频

final trendingVideos = await tiktokApi.getTrendingVideos();
print(trendingVideos);

5. 处理响应

TikTok API 的响应通常是一个 JSON 对象,你可以根据需要解析这些数据。

final userInfo = await tiktokApi.getUserInfo('USER_ID');
if (userInfo != null) {
  print('Username: ${userInfo['username']}');
  print('Followers: ${userInfo['followers']}');
} else {
  print('Failed to fetch user info');
}

6. 错误处理

在使用 API 时,可能会遇到各种错误,例如网络错误、API 限制等。建议在使用 try-catch 块来捕获并处理这些错误。

try {
  final userInfo = await tiktokApi.getUserInfo('USER_ID');
  print(userInfo);
} catch (e) {
  print('Error: $e');
}

7. 配置 TikTok 开发者账号

为了使用 TikTok API,你需要注册一个 TikTok 开发者账号,并创建一个应用以获取 API Key 和其他认证信息。请参考 TikTok 官方文档完成这些步骤。

8. 遵守 TikTok API 使用条款

在使用 TikTok API 时,务必遵守 TikTok 的使用条款和隐私政策,确保你的应用符合 TikTok 的开发者指南。

示例代码

以下是一个完整的示例代码,展示如何在 Flutter 应用中使用 tiktok_api 插件获取用户信息:

import 'package:flutter/material.dart';
import 'package:tiktok_api/tiktok_api.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: TikTokApiExample(),
    );
  }
}

class TikTokApiExample extends StatefulWidget {
  [@override](/user/override)
  _TikTokApiExampleState createState() => _TikTokApiExampleState();
}

class _TikTokApiExampleState extends State<TikTokApiExample> {
  final tiktokApi = TikTokApi(apiKey: 'YOUR_TIKTOK_API_KEY');
  Map<String, dynamic>? userInfo;

  Future<void> fetchUserInfo() async {
    try {
      final info = await tiktokApi.getUserInfo('USER_ID');
      setState(() {
        userInfo = info;
      });
    } catch (e) {
      print('Error: $e');
    }
  }

  [@override](/user/override)
  void initState() {
    super.initState();
    fetchUserInfo();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('TikTok API Example'),
      ),
      body: Center(
        child: userInfo != null
            ? Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Text('Username: ${userInfo!['username']}'),
                  Text('Followers: ${userInfo!['followers']}'),
                ],
              )
            : CircularProgressIndicator(),
      ),
    );
  }
}
回到顶部