Flutter游戏集成插件flutter_yandex_games的使用

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

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

  1. 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>
  1. android/app/build.gradle文件中确保添加了Google Play服务的依赖:
dependencies {
    implementation 'com.google.android.gms:play-services-auth:版本号'
    // 其他依赖
}

iOS

  1. 在Xcode中,打开Runner项目的Info.plist文件,并添加Yandex Games的客户端ID(替换为你的实际客户端ID):
<key>YandexGamesClientID</key>
<string>你的Yandex Games客户端ID</string>
  1. 确保你的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'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

注意事项

  1. 确保你已经在Yandex.Games平台上创建了应用,并获取了客户端ID。
  2. 在发布应用之前,将测试模式设置为false
  3. 根据你的具体需求,调整代码中的功能和UI。

通过上述步骤,你应该能够在Flutter项目中成功集成并使用flutter_yandex_games插件。

回到顶部