Flutter Battle.net API集成插件battle_net的使用
Flutter Battle.net API集成插件battle_net的使用
Dart 包装器客户端用于Battle.Net API。
你可以在你的 Flutter/Dart 应用程序中轻松地与 BattleNet 服务通信。
可用功能
Battle.net OAuth APIs
-
用户认证
- 授权请求 - 授权请求是授权码流的第一部分,OAuth 的认证流程用于代表用户执行 API 请求。
- 访问令牌请求 - 访问令牌请求是授权码流的第二部分。
- 用户信息 - 返回与当前承载令牌关联的用户的基本信息。
-
应用程序认证
- 发送客户端凭据 - 访问令牌请求。这是客户端凭据流所需的唯一请求,OAuth 的认证流程旨在为应用服务器提供支持。
-
令牌验证
- 发送令牌验证 - 验证给定的承载令牌是否有效,并检索有关令牌的元数据,包括用于创建令牌的
<strong>client_id</strong>
,过期时间戳,以及授予令牌的作用域。
- 发送令牌验证 - 验证给定的承载令牌是否有效,并检索有关令牌的元数据,包括用于创建令牌的
World of Warcraft 游戏数据 APIs
-
WoW Token API
- 获取 Token 索引 - 返回 WoW Token 索引。
-
连接的区域 API
- 连接的区域 - 通过 ID 返回连接的区域。
- 连接的区域搜索 - 执行连接区域的搜索。
开始使用
在 pubspec.yaml
文件中添加库的最新版本:
dependencies:
battle_net: ^<latest_version>
现在可以在 Dart 代码中使用:
import 'package:battle_net/battle_net.dart';
使用方法
提供可以在 BattleNet 开发者账户中找到的 client id
和 client secret
。
final BattleNet battleNet =
BattleNet(clientId: 'clientId', clientSecret: 'clientSecret');
现在可以开始从 BattleNet 服务获取数据了。
final ClientCredentialsResponse clientCredentialsResponse =
await battleNet.postClientCredentials();
获取 Token 索引
你可以使用以下示例获取 EU 地区的零售版 WoW Token 价格。
final TokenIndex tokenIndex = await battleNet.getTokenIndex(
accessToken: clientCredentialsResponse.accessToken,
region: BattleNetRegion.eu,
namespace: BattleNetNamespace.dynamic,
locale: BattleNetLocale.enGB);
连接的区域
你还可以使用以下示例通过 ID 获取连接的区域详情。
const int connectedRealmId = 1301;
final ConnectedRealmResponse connectedRealm = await battleNet.getConnectedRealm(
accessToken: clientCredentialsResponse.accessToken,
region: BattleNetRegion.eu,
namespace: BattleNetNamespace.dynamic,
id: connectedRealmId);
连接的区域搜索
你还可以使用以下示例搜索连接的区域。
final ConnectedRealmSearchResponse result =
await battleNet.getConnectedRealmSearch(
accessToken: clientCredentialsResponse.accessToken,
region: BattleNetRegion.eu,
namespace: BattleNetNamespace.dynamic,
statusType: ServerStatus.UP,
realmsTimezone: RealmTimezone.EUROPE_PARIS,
hasQueue: false,
populationType: PopulationType.FULL,
realmsIsTournament: false,
);
额外信息
可用的 BattleNet 地区
API 数据仅限于特定地区。BattleNet 地区是指要检索的数据所在的区域。本地化支持仅限于暴雪社区游戏网站支持的位置。
地区 | 数据 |
---|---|
US | Battle.net, WoW, D3, SC2 |
EU | Battle.net, WoW, D3, SC2 |
KR | Battle.net, WoW, D3, SC2 |
TW | Battle.net, WoW, D3, SC2 |
例如,
BattleNetRegion.eu
本地化
所有可用的 API 资源都使用 BattleNetLocale 参数提供本地化的字符串。支持的语言因地区而异,并且与暴雪社区网站支持的语言一致。
地区 | 主机 | 可用的语言 |
---|---|---|
北美 | https://us.api.blizzard.com/ | en_US, es_MX, pt_BR |
欧洲 | https://eu.api.blizzard.com/ | en_GB, es_ES, fr_FR, ru_RU, de_DE, pt_PT, it_IT |
韩国 | https://kr.api.blizzard.com/ | ko_KR |
台湾 | https://tw.api.blizzard.com/ | zh_TW |
例如,
BattleNetLocale.enGB
版权与许可
该项目遵循 MIT 许可证。
完整示例代码
以下是一个完整的示例代码,展示了如何使用 battle_net
插件进行各种操作。
import 'package:battle_net/battle_net.dart';
import 'package:battle_net/src/models/realm/population_type_localised.dart';
import 'package:battle_net/src/models/realm/realm_localised.dart';
import 'package:battle_net/src/models/realm/server_status_localised.dart';
/// 这个示例演示了如何使用额外信息获取 [TokenResponse] 数据
Future<void> main() async {
/// 提供 client id 和 client secret
final BattleNet battleNet =
BattleNet(clientId: 'clientId', clientSecret: 'clientSecret');
/// 获取访问令牌,提供要检索数据的区域
final ClientCredentialsResponse clientCredentialsResponse =
await battleNet.postClientCredentials();
/// 验证给定的承载令牌是否有效并检索有关令牌的元数据
final CheckTokenResponse checkTokenResponse = await battleNet
.postTokenValidation(token: clientCredentialsResponse.accessToken);
print(checkTokenResponse);
/// 获取 EU 地区零售版 WoW Token 价格
final TokenIndexResponse tokenIndex = await battleNet.getTokenIndex(
accessToken: clientCredentialsResponse.accessToken,
region: BattleNetRegion.eu,
namespace: BattleNetNamespace.dynamic,
locale: BattleNetLocale.enGB);
print(tokenIndex);
/// 获取 EU 地区经典版 WoW Token 价格
final TokenIndexResponse tokenIndexClassic = await battleNet
.postClientCredentials()
.then((ClientCredentialsResponse response) => battleNet.getTokenIndex(
accessToken: response.accessToken,
region: BattleNetRegion.eu,
namespace: BattleNetNamespace.dynamicClassic,
locale: BattleNetLocale.enGB));
print(tokenIndexClassic);
/// 执行连接区域的搜索
final ConnectedRealmSearchResponse connectedRealmSearchResponse =
await battleNet.postClientCredentials().then(
(ClientCredentialsResponse value) => battleNet.getConnectedRealmSearch(
accessToken: value.accessToken,
region: BattleNetRegion.eu,
namespace: BattleNetNamespace.dynamicClassic,
statusType: ServerStatus.UP,
realmsTimezone: RealmTimezone.EUROPE_PARIS,
hasQueue: false,
populationType: PopulationType.FULL,
realmsIsTournament: false,
));
print(connectedRealmSearchResponse);
/// 获取连接的 'Outland' 区域详情
const int connectedRealmId = 1301;
final ConnectedRealmSearchData connectedRealm =
await battleNet.getConnectedRealm(
accessToken: clientCredentialsResponse.accessToken,
region: BattleNetRegion.eu,
namespace: BattleNetNamespace.dynamic,
id: connectedRealmId);
print(connectedRealm);
/// 授权码流
/// 使用提供的参数构建授权请求 [Uri]
final Uri redirectUri = Uri.parse('https://localhost');
final List<BattleNetScope> scope = [
BattleNetScope.openid,
BattleNetScope.wowProfile,
];
final Uri authorizationUri = battleNet.buildAuthorizationUri(
redirectUri: redirectUri,
scope: scope,
);
print(authorizationUri);
/// 将用户重定向到 authorizationUri 并获取来自授权服务器的授权代码
const String code = 'auth_code';
/// 访问令牌请求是授权码流的第二部分
final AuthorizationCodeResponse authorizationCodeResponse = await battleNet
.postAuthorizationCode(redirectUri: redirectUri, code: code);
/// 返回与当前承载令牌关联的用户的基本信息
final UserInfoResponse userInfo = await battleNet.getUserInfo(
accessToken: authorizationCodeResponse.accessToken);
print(userInfo);
}
更多关于Flutter Battle.net API集成插件battle_net的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter Battle.net API集成插件battle_net的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中集成并使用battle_net
插件的示例代码。这个插件允许你访问Battle.net API,获取用户信息、游戏数据等。
首先,确保你的Flutter项目已经创建好,并且在pubspec.yaml
文件中添加了battle_net
依赖:
dependencies:
flutter:
sdk: flutter
battle_net: ^最新版本号 # 请替换为实际可用的最新版本号
然后运行flutter pub get
来安装依赖。
接下来,你需要在Battle.net开发者门户创建一个应用,并获取Client ID和Client Secret。这些信息将用于认证和访问API。
以下是一个简单的Flutter应用示例,演示如何使用battle_net
插件:
import 'package:flutter/material.dart';
import 'package:battle_net/battle_net.dart';
import 'dart:convert';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Battle.net API Integration',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: BattleNetPage(),
);
}
}
class BattleNetPage extends StatefulWidget {
@override
_BattleNetPageState createState() => _BattleNetPageState();
}
class _BattleNetPageState extends State<BattleNetPage> {
String _responseData = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Battle.net API Integration'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _fetchUserData,
child: Text('Fetch User Data'),
),
SizedBox(height: 20),
Text(_responseData),
],
),
),
);
}
Future<void> _fetchUserData() async {
// 替换为你的Client ID和Client Secret
String clientId = '你的Client ID';
String clientSecret = '你的Client Secret';
String region = 'us'; // Battle.net区域,例如'us', 'eu', 'kr', 'tw'
String accessToken = '用户的OAuth访问令牌'; // 你需要先通过OAuth2流程获取这个令牌
BattleNet battleNet = BattleNet(clientId: clientId, clientSecret: clientSecret, region: region);
try {
// 这里假设你已经有了用户的OAuth访问令牌
var response = await battleNet.getUserData(accessToken: accessToken, battleTag: '用户#1234');
// 解析JSON响应
Map<String, dynamic> data = jsonDecode(response.body);
// 更新UI
setState(() {
_responseData = jsonEncode(data, prettyPrint: true);
});
} catch (e) {
print('Error fetching user data: $e');
setState(() {
_responseData = 'Error fetching user data: ${e.toString()}';
});
}
}
}
注意:
- 在实际使用中,你需要通过OAuth2流程获取用户的访问令牌(
accessToken
)。这通常涉及到在浏览器中打开一个认证页面,让用户登录并授权你的应用。 battle_net
插件的具体API和方法可能会根据版本有所变化,请参考插件的官方文档和源代码以获取最新和最准确的信息。- 上面的代码示例假设你已经有了用户的访问令牌,并且知道用户的BattleTag(例如
用户#1234
)。
由于获取OAuth访问令牌涉及多步流程(包括重定向URI处理、令牌交换等),这里为了简洁起见没有包含这部分代码。你可以查阅Battle.net API文档和Flutter中的OAuth2库(如flutter_oauth2
)来实现完整的认证流程。