android - 每 x 小时在 android 上重复 Unity 游戏任务
问题描述
我正在开发一款适用于 Android 的 Unity 游戏。我没有太多经验,所以我想知道每四个小时创建一次任务的方法。
现在我只是调用重复异步任务来从 Firebase 获取数据(它工作得很好),但我对这个解决方案有疑问。我不确定它是如何工作的 -> 如果用户关闭应用程序,它是否能够发送任务已创建的通知,或者应用程序必须在后台运行?如果用户退出,我会将时间存储在静态变量中,并比较用户再次登录的时间。我正在考虑从后端执行此操作 - Firebase 或 Playfab -> 每 4 小时发送一次触发器以启动任务,但我也不确定它是如何工作的 -> 用户是否会关闭他的应用程序,是不是意味着他会错过扳机?
将不胜感激任何建议!
解决方案
在 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
这有点工作,但“每四个小时唤醒我的游戏做一件事”的想法有点不常见。通常,每当发生有趣的事情时,您都需要推送通知(例如:当我收到朋友的礼物或轮到我时,只是向我的客户发送云消息),或者您想订阅实时数据库中的更改每当您的游戏发生有趣的事情并且它当前正在运行时。
推荐阅读
- azure-web-app-service - 如何在应用服务上禁用 HTTP 到 HTTPS 重定向?
- unity3d - Unity 游戏的主服务器 ->(主机 <-> 客户端)设置
- google-bigquery - 将 GCP 数据从 Google BigQuery 表加载到 Snowflake
- java - :创建名称为“productController”的bean时出错:通过字段“productRepository”表示的不满足的依赖关系:
- python - Plotly in Python - 更改标记颜色
- javascript - 在配置了 Webpack 的 React 应用程序中导入图像时遇到问题
- java - 如何避免 Kotlin 中的过载冲突?
- python - 在 python 程序中发送 JSON 作为参数时转义双引号
- wordpress - 如何从具有多个图像的 csv 导入产品以及在 wordpress 中导入产品时我应该如何跳过无效链接?
- angular - Angular - 页面刷新时的奇怪行为