c# - 在我的 android 应用程序中实现即时消息

标签 c# android unity3d onesignal

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

6年前关闭。




Improve this question




这里不欢迎我认识的每个人讨论问题,所以我试图使其尽可能程序化。简而言之,我正在寻求更好的方法来做到这一点,或者优化我现有代码的方法。我的应用程序是通过使用 Unity3D 创建的。游戏引擎,但它不是游戏。我只是觉得这个引擎真的很容易使用,因此我正在使用一个名为 OneSignal 的服务网站。 .足够的漫无边际,任何更多,它变得与问题无关。

这是我第一次尝试创建不使用 Sockets 的即时消息应用程序。 .所以我的整体设计充其量是草率的。但是,这是我的设置:

目前我正在使用 HTTProtocol,在其中我使用 PHP 将所有逻辑存储在我的网络服务器上。基本上我正在做的是在 JSON 中返回数据库结果。在 C# 中使用 SimpleJSON 解析的格式然后由应用程序处理以显示新消息等(基于应用程序/服务器上的“已读”状态。)

这就是我眼中的问题所在。虽然我可以在收到新消息时向用户发送推送通知,但我将如何从服务器中提取所有这些消息?我想到的唯一合乎逻辑的方法是每 5-10 秒不断地轮询网络服务器并检查是否有任何新消息。如果有,则将它们添加到相应的消息列表中并应用“未读消息”属性。

那么手机是否应该将所有用户以前的消息存储在内存中?还是我应该每次都从数据库中提取所有消息?第二种选择似乎比简单聊天功能所需的带宽要多得多。但是,似乎存储在设备上的一堆消息会导致设备困惑,并且每次打开消息时从包含消息的平面文件存储中读取会(在我看来)使用相当多的磁盘 I/O。那么消息应该存储在内存中吗?然后你会遇到设备内存不足的情况,因为 androids 使用了很多,除非消息(线程)被删除,否则它永远不会被 GC 收集。

一位 friend 告诉我,我应该通过推送通知传递消息,并在收到消息时在设备上处理它们,但问题是推送通知并不总是被接收到,然后我们最终会得到很多丢失的消息。

如果我们不断地轮询数据库,那么我们将耗尽用户的电池。

我完全不知道在这里做什么,并希望得到一些指导。这是我的第一个 android 应用程序,虽然它非常非常好,但我推迟到最后的功能,因为我认为它会很简单(消息传递)结果证明是最困难的。

如果这是提出此类问题的不正确的地方,请您(附上您的立即否决票)在此所属的评论中发帖。

最佳答案

您可以尝试在您的应用程序中实现 XMPP 客户端,因为 Unity3d 支持 .net/mono,您应该能够找到 suitable library .

推送通知并不真正适用于 IM(至少不是每条消息)

关于c# - 在我的 android 应用程序中实现即时消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30266648/

相关文章:

java - 如何检查该字段是否存在于 firestore 中?

multithreading - Unity 3D 应用程序的外部分析器

c# - Firebase Unity 插件 : How do you persist user session?(自动登录)

c# - 如何使用 InMemory 数据库检查在单元测试中正确添加的记录

c# - 傻瓜线程队列

java - 获取 logcat 以显示整个下载的 HTML

c# - 如何在选择游戏对象时将 Material 分配给游戏对象,并在使用 C# 取消选择游戏对象时将其更改回原始 Material ?

C# : The best solution to parse the xml file?

c# - 将音频输入转换为时间并使用C#显示

java - Android ImageView 未显示在 SherlockFragment 中