每隔X小时在Android上重复Unity游戏任务

时间:2019-07-17 04:56:02

标签: android firebase unity3d

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

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

将非常感谢您的任何建议!

1 个答案:

答案 0 :(得分:0)

在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

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