Flutter加密货币交易插件bybit的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter加密货币交易插件bybit的使用

ByBit 是一个用于与 ByBit 交易所平台 API 进行简单通信的 Dart 库。这个包允许你进行简单的 REST API 调用或订阅多个 WebSocket 频道主题。

如何使用它

创建一个 ByBit 实例

请注意,所有参数都是可选的,但你需要有效的密钥和密码才能访问 ByBit 的私有主题。你可以在 ByBit 网站上创建自己的 API 密钥。

var bybit = ByBit(
    key: 'yOuRsUpErKey',
    password: 'yOuRsUpErPaSsWoRd',
    logLevel: 'INFO',
    restUrl: 'https://api.bybit.com',
    websocketUrl: 'wss://stream.bytick.com/realtime',
    timeout: 60);

注意:超时以秒为单位。如果没有提供超时参数,则不会在超时时抛出异常。

连接到服务器

bybit.connect();

添加周期性的 REST API 调用(如果需要)

有时,你可能希望每隔一段时间从 API 获取信息。这就是为什么该库允许设置哪些 REST API 调用需要定期执行,并且来自服务器的所有响应会被合并到一个单一的流中。请注意 API 调用限制

bybit.getServerTimePeriodic(period: Duration(seconds: 5));
bybit.getAnnouncementPeriodic(period: Duration(seconds: 5));
bybit.getOpenInterestPeriodic(
    symbol: 'ETHUSD',
    interval: '15min',
    period: Duration(seconds: 2),
    limit: 3);

订阅 WebSocket 主题

bybit.subscribeToKlines(symbol: 'ETHUSD', interval: '1');
bybit.subscribeToKlines(symbol: 'BTCUSD', interval: 'D');
bybit.subscribeToOrderBook(depth: 25);

读取 ByBit 流并处理服务器响应

注意:bybit.stream 流包含来自 WebSockets 和周期性 REST API 调用的所有数据。

StreamBuilder(
    stream: bybit.stream,
    builder: (context, bybitResponse) {
        print('From WebSocket: ' + bybitResponse.data.toString());
        //...
    }
),

也可以进行单次 REST API 调用

FutureBuilder(
    future: bybit.getKLine(symbol: 'BTCUSD', from: 1581231260, interval: 'D'),
    builder: (context, bybitResponse) {
        // 处理 bybit 响应
        if (bybitResponse.hasData && bybitResponse.data != null) {
          print('From REST: ' + bybitResponse.data.toString());
          //...
        }
    }
)

示例

下面是一个完整的 Flutter 示例,展示了如何使用 ByBit 插件来连接到 ByBit 服务器、订阅 WebSocket 主题以及处理响应。

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'ByBit Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'ByBit Flutter Example'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late ByBit bybit;
  List<String> messages = [];

  @override
  void initState() {
    super.initState();
    bybit = ByBit(logLevel: 'INFO');
    bybit.connect();

    // 定义要定期执行的 REST API 调用
    bybit.getServerTimePeriodic(period: Duration(seconds: 5));
    bybit.getAnnouncementPeriodic(period: Duration(seconds: 5));

    // 订阅 WebSocket 频道
    bybit.subscribeToKlines(symbol: 'BTCUSD', interval: 'D');

    // 监听流中的消息
    bybit.stream.listen((data) {
      setState(() {
        messages.add(data.toString());
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: ListView.builder(
        itemCount: messages.length,
        itemBuilder: (context, index) {
          return ListTile(
            title: Text(messages[index]),
          );
        },
      ),
    );
  }

  @override
  void dispose() {
    bybit.disconnect();
    super.dispose();
  }
}

函数列表

查看 ByBit 文档获取最新的可用函数。


更多关于Flutter加密货币交易插件bybit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter加密货币交易插件bybit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter中使用Bybit加密货币交易API的示例代码。请注意,实际使用中你需要处理API密钥、签名等敏感信息,并且Bybit API有严格的速率限制和错误处理要求。这里仅提供一个基本的框架和示例,帮助你开始。

首先,你需要确保你的Flutter项目已经配置好,并且已经添加了必要的依赖,比如http用于发送HTTP请求。

  1. 添加依赖

在你的pubspec.yaml文件中添加http依赖:

dependencies:
  flutter:
    sdk: flutter
  http: ^0.13.3  # 确保使用最新版本

然后运行flutter pub get来安装依赖。

  1. 创建Bybit API请求帮助类

创建一个新的Dart文件,比如bybit_api.dart,来处理Bybit API请求。

import 'dart:convert';
import 'package:http/http.dart' as http;

class BybitApi {
  String apiUrl = 'https://api.bybit.com/v3';
  String apiKey;
  String apiSecret;

  BybitApi({required this.apiKey, required this.apiSecret});

  Future<Map<String, dynamic>> getOrderBook(String symbol) async {
    String endpoint = '/orderBook/L2_20';
    String url = '$apiUrl/$endpoint?symbol=$symbol';

    http.Response response = await http.get(Uri.parse(url));

    if (response.statusCode == 200) {
      return jsonDecode(response.body);
    } else {
      throw Exception('Failed to fetch order book: ${response.statusCode}');
    }
  }

  Future<String> signRequest(String method, String endpoint, Map<String, String> params) {
    // 时间戳
    String timestamp = (DateTime.now().millisecondsSinceEpoch / 1000).toString();
    params['api_key'] = apiKey;
    params['timestamp'] = timestamp;

    // 排序参数
    List<String> keys = params.keys.toList()..sort();
    String queryString = keys.map((key) => '${Uri.encodeComponent(key)}=${Uri.encodeComponent(params[key]!)}').join('&');

    // 生成签名
    String prehash = '${method.toUpperCase()}${Uri.encodeComponent(endpoint)}$timestamp$queryString';
    String signature = _hmacSha256(apiSecret, prehash);

    params['sign'] = signature;
    return queryString;
  }

  Future<http.Response> privateRequest(String method, String endpoint, Map<String, String> params) async {
    String queryString = await signRequest(method, endpoint, params);
    String url = '$apiUrl/$endpoint?$queryString';

    http.Response response;
    if (method == 'GET') {
      response = await http.get(Uri.parse(url));
    } else if (method == 'POST') {
      response = await http.post(Uri.parse(url), body: params);
    } else {
      throw UnsupportedError('Unsupported method: $method');
    }

    return response;
  }

  String _hmacSha256(String key, String message) {
    // 需要导入'package:cryptography/cryptography.dart'或其他加密库来实现HMAC-SHA256
    // 这里仅为示例,未实际实现加密逻辑
    throw UnimplementedError('HMAC-SHA256 not implemented');
  }
}

注意:上面的_hmacSha256方法是一个占位符,你需要使用Dart的加密库来实现HMAC-SHA256签名。可以使用pointycastlecryptography等库。

  1. 使用BybitApi类

在你的主应用程序文件中(比如main.dart),你可以这样使用BybitApi类:

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late BybitApi bybitApi;
  Map<String, dynamic>? orderBook;

  @override
  void initState() {
    super.initState();
    String apiKey = 'your_api_key_here';
    String apiSecret = 'your_api_secret_here';
    bybitApi = BybitApi(apiKey: apiKey, apiSecret: apiSecret);
    fetchOrderBook();
  }

  void fetchOrderBook() async {
    try {
      orderBook = await bybitApi.getOrderBook('BTCUSD');
      setState(() {});
    } catch (e) {
      print(e);
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Bybit API Example'),
        ),
        body: orderBook != null
            ? ListView.builder(
                itemCount: orderBook!['asks']!.length,
                itemBuilder: (context, index) {
                  return ListTile(
                    title: Text('Ask: ${orderBook!['asks']![index][0]} ${orderBook!['asks']![index][1]}'),
                  );
                },
              )
            : Center(child: CircularProgressIndicator()),
      ),
    );
  }
}

这个示例展示了如何获取BTCUSD的交易订单簿,并在Flutter应用中显示买单(asks)。

重要提示

  • 在生产环境中,不要在客户端代码中硬编码API密钥。考虑使用安全存储或后端服务来处理敏感信息。
  • Bybit API有速率限制,确保你的请求符合API文档中的规定。
  • 实现完整的错误处理和重试逻辑。
  • 使用官方提供的SDK(如果有的话)来代替手动实现API请求和签名,以减少出错的可能性。
回到顶部