Flutter游戏集成插件flutter_yandex_games的使用
Flutter游戏集成插件flutter_yandex_games的使用
特性
这是我在项目中需要的最基本的功能。如果您需要更多功能,请自由贡献或提出问题。
- 玩家数据保存/加载。
- 显示全屏广告。
- 显示激励视频广告。
开始使用
在您的 index.html
文件中添加以下脚本:
<script src="https://yandex.ru/games/sdk/v2"></script>
在 pubspec.yaml
文件中添加依赖项:
dependencies:
...
flutter_yandex_games: 0.0.6
如果将游戏上传到 Yandex 后遇到 404 错误,请从 index.html
文件中移除以下行:
<base href="$FLUTTER_BASE_HREF">
初始化SDK
await YandexGames.init();
获取玩家数据
var player = YandexGames.getPlayer();
var data = await player.getData();
设置玩家数据
var player = YandexGames.getPlayer();
player.setData({"gold": 100});
显示全屏广告
YandexGames.showFullscreenAd(
onClose: (wasShown) {
// 广告关闭回调
},
onError: (error) {
// 广告错误处理
},
);
显示激励视频广告
YandexGames.showRewardedVideoAd(
onOpen: () {
debugPrint("rewardedVideo onOpen");
},
onRewarded: () {
// 给予奖励
},
onClose: () {
debugPrint("rewardedVideo onClosed");
},
onError: (error) {
// 广告错误处理
},
);
请求用户评价
YandexGames.canReview().then((response) {
if(response.value){
YandexGames.requestReview();
}
});
玩家授权
检查玩家是否已授权
YandexGames.getPlayer().isAuthorized()
打开授权对话框
YandexGames.openAuthDialog().then((_) {
// 授权成功
}, onError: (error) {
// 授权失败
});
完整示例代码
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_yandex_games/flutter_yandex_games.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Yandex Games 插件演示',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String status = "初始化中...";
bool initFinished = false;
[@override](/user/override)
void initState() {
initYandexGames();
}
void initYandexGames() {
YandexGames.init().then((value) {
setState(() {
status = "Yandex Games SDK 初始化成功";
initFinished = true;
});
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
Text(status),
TextButton(
onPressed: initFinished ? showFullscreenAd : null,
child: const Text("显示全屏广告")),
TextButton(
onPressed: initFinished ? showRewardedVideoAd : null,
child: const Text("显示激励视频广告")),
TextButton(
onPressed: initFinished ? savePlayerData : null,
child: const Text("保存状态到玩家数据")),
TextButton(
onPressed: initFinished ? getPlayerData : null,
child: const Text("加载玩家数据")),
TextButton(
onPressed: initFinished ? canReview : null,
child: const Text("调用 can review")),
TextButton(
onPressed: initFinished ? requestReview : null,
child: const Text("请求评价")),
TextButton(
onPressed: initFinished ? isPlayerAuthorized : null,
child: const Text("检查玩家是否已授权")),
TextButton(
onPressed: initFinished ? openAuthDialog : null,
child: const Text("打开授权对话框")),
TextButton(
onPressed: initFinished ? getEnvironmentVariables : null,
child: const Text("获取环境变量")),
TextButton(
onPressed: initFinished ? checkShortcutPrompt : null,
child: const Text("检查是否可以显示快捷提示")),
TextButton(
onPressed: initFinished ? showShortcutPrompt : null,
child: const Text("显示快捷提示")),
],
),
);
}
void showFullscreenAd() {
YandexGames.showFullscreenAd(
onClose: (wasShown) {
debugPrint("onClose: $wasShown");
},
onError: (error) {
debugPrint("onError message: $error");
setState(() {
status = "全屏广告未加载";
});
},
);
}
void showRewardedVideoAd() {
YandexGames.showRewardedVideoAd(
onOpen: () {
debugPrint("onOpen");
setState(() {
status = "激励视频已打开";
});
},
onRewarded: () {
debugPrint("onRewarded");
setState(() {
status = "激励视频已奖励";
});
},
onClose: () {
debugPrint("onClose");
},
onError: (error) {
debugPrint("onError message: $error");
setState(() {
status = "激励视频未加载";
});
},
);
}
void savePlayerData() {
YandexGames.getPlayer().setData({"status": status});
}
void getPlayerData() {
YandexGames.getPlayer().getData().then((value) {
setState(() {
status = "玩家数据已接收: ${jsonEncode(value)}";
});
});
}
void canReview() {
YandexGames.canReview().then((response) {
setState(() {
status =
"可以评价值: ${response.value}, 原因: ${response.reason}";
});
});
}
void requestReview() {
YandexGames.requestReview().then((response) {
setState(() {
status = "请求评价. 反馈发送: ${response.feedbackSent}";
});
});
}
void isPlayerAuthorized() {
setState(() {
status = "玩家已授权: ${YandexGames.getPlayer().isAuthorized()}";
});
}
void openAuthDialog() {
YandexGames.openAuthDialog().then((value) {
setState(() {
status = "玩家授权成功";
});
}, onError: (error) {
setState(() {
status = "玩家授权失败 $error";
});
});
}
void getEnvironmentVariables(){
setState(() {
status = "环境应用ID: ${YandexGames.environment.app.id}, "
"语言: ${YandexGames.environment.i18n.lang}";
});
}
void checkShortcutPrompt(){
YandexGames.canShowShortcutPrompt().then((value){
setState(() {
status = "可以显示提示: $value";
});
});
}
void showShortcutPrompt(){
YandexGames.canShowShortcutPrompt().then((value){
setState(() {
status = "提示已显示: $value";
});
});
}
}
更多关于Flutter游戏集成插件flutter_yandex_games的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter游戏集成插件flutter_yandex_games的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中集成flutter_yandex_games
插件可以让你轻松访问Yandex.Games服务,为你的游戏增加成就、排行榜和登录等功能。以下是一个简单的代码案例,展示如何在Flutter项目中集成并使用flutter_yandex_games
插件。
步骤 1: 添加依赖
首先,在你的pubspec.yaml
文件中添加flutter_yandex_games
依赖:
dependencies:
flutter:
sdk: flutter
flutter_yandex_games: ^最新版本号 # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
步骤 2: 配置Android和iOS项目
Android
- 在
android/app/src/main/AndroidManifest.xml
中添加必要的权限和Yandex Games的客户端ID(替换为你的实际客户端ID):
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<!-- 其他配置 -->
<meta-data
android:name="com.yandex.games.api.client_id"
android:value="你的Yandex Games客户端ID" />
<!-- 其他配置 -->
</manifest>
- 在
android/app/build.gradle
文件中确保添加了Google Play服务的依赖:
dependencies {
implementation 'com.google.android.gms:play-services-auth:版本号'
// 其他依赖
}
iOS
- 在Xcode中,打开
Runner
项目的Info.plist
文件,并添加Yandex Games的客户端ID(替换为你的实际客户端ID):
<key>YandexGamesClientID</key>
<string>你的Yandex Games客户端ID</string>
- 确保你的iOS项目配置了必要的权限和网络访问权限。
步骤 3: 初始化并使用插件
在你的Flutter代码中,初始化并使用flutter_yandex_games
插件。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:flutter_yandex_games/flutter_yandex_games.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
YandexGames? _yandexGames;
@override
void initState() {
super.initState();
// 初始化Yandex Games插件
_initYandexGames();
}
Future<void> _initYandexGames() async {
_yandexGames = YandexGames(
clientId: '你的Yandex Games客户端ID', // 替换为你的实际客户端ID
testMode: true, // 如果是测试模式,设置为true
);
try {
await _yandexGames!.initialize();
print('Yandex Games initialized successfully');
} catch (e) {
print('Failed to initialize Yandex Games: $e');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Yandex Games Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
if (_yandexGames!.isUserSignedIn) {
await _yandexGames!.signOut();
print('User signed out');
} else {
await _yandexGames!.signIn();
print('User signed in');
}
},
child: Text('Sign In/Out'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
try {
var achievements = await _yandexGames!.loadAchievements();
print('Achievements: $achievements');
} catch (e) {
print('Failed to load achievements: $e');
}
},
child: Text('Load Achievements'),
),
],
),
),
),
);
}
}
注意事项
- 确保你已经在Yandex.Games平台上创建了应用,并获取了客户端ID。
- 在发布应用之前,将测试模式设置为
false
。 - 根据你的具体需求,调整代码中的功能和UI。
通过上述步骤,你应该能够在Flutter项目中成功集成并使用flutter_yandex_games
插件。