首页 > 解决方案 > 每 x 小时在 android 上重复 Unity 游戏任务

问题描述

我正在开发一款适用于 Android 的 Unity 游戏。我没有太多经验,所以我想知道每四个小时创建一次任务的方法。

现在我只是调用重复异步任务来从 Firebase 获取数据(它工作得很好),但我对这个解决方案有疑问。我不确定它是如何工作的 -> 如果用户关闭应用程序,它是否能够发送任务已创建的通知,或者应用程序必须在后台运行?如果用户退出,我会将时间存储在静态变量中,并比较用户再次登录的时间。我正在考虑从后端执行此操作 - Firebase 或 Playfab -> 每 4 小时发送一次触发器以启动任务,但我也不确定它是如何工作的 -> 用户是否会关闭他的应用程序,是不是意味着他会错过扳机?

将不胜感激任何建议!

标签: androidfirebaseunity3d

解决方案


在 Firebase 中,您有一些选择。

根据你在做什么,我认为你最好的答案就是使用实时数据库:https ://firebase.google.com/docs/database/unity/retrieve-data#listen_for_events

如果您真的想唤醒您的客户来轮询数据,您可以使用 Firebase Cloud Messaging:https ://firebase.google.com/docs/cloud-messaging/unity/client 如果您使用的是后者,您可以安排此处所述的云功能:https ://firebase.googleblog.com/2019/04/schedule-cloud-functions-firebase-cron.html

这里的菊花链还有很多,所以我尝试从上述示例中提取相关部分:

// This registration token comes from the client FCM SDKs.
var topic = 'four_hours';

export scheduledFunctionPlainEnglish =
functions.pubsub.schedule('every 4 hours').onRun((context) => {
    var message = {
      data: {
        score: '850',
        time: '2:45'
      },
      topic: topic
    };

    // Send a message to the device corresponding to the provided
    // registration token.
    admin.messaging().send(message)
      .then((response) => {
        // Response is a message ID string.
        console.log('Successfully sent message:', response);
      })
      .catch((error) => {
        console.log('Error sending message:', error);
      });
});

在 Unity 上,您只需订阅该主题:

Firebase.Messaging.FirebaseMessaging.Subscribe("four_hours");
Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;

最后,根据您提供的信息,很难说哪种方法适合您。但是,如果您希望每个客户端每 4 小时轮询一次,我认为您最好编写一些原生 Android 代码来执行此操作。我建议查看 WorkManager,特别是设置定期工作请求: https ://developer.android.com/topic/libraries/architecture/workmanager/how-to/recurring-work

您想编写一个原生 Java 或 Kotlin 库并从 Unity 访问它。这比我认为我可以在 Stack Overflow 答案中获得的更详细,但我会向您指出 Unity 的文档:https ://docs.unity3d.com/Manual/AndroidJavaSourcePlugins.html

这有点工作,但“每四个小时唤醒我的游戏做一件事”的想法有点不常见。通常,每当发生有趣的事情时,您都需要推送通知(例如:当我收到朋友的礼物或轮到我时,只是向我的客户发送云消息),或者您想订阅实时数据库中的更改每当您的游戏发生有趣的事情并且它当前正在运行时。


推荐阅读