我打算创建一个 Android聊天应用程序.实际上聊天将成为应用程序的一项功能.我想知道有关Android聊天应用程序的最佳实践.我熟悉的两个选项是C2MD,每隔几秒就会对服务器db进行一次自定义轮询.

现在,我知道C2MD本来应该是伟大的,但根据我的理解,它并不可靠.我试图实现它,它似乎没有工作.此外,如果由于某种原因谷歌结束时发生了某些事情(就像他们的服务器已关闭 – 不太可能但可能发生)我无法联系他们,并且他们处于他们的时间框架.

现在,如果我做自己的事情(我发送用户创建的消息的基本方法,然后定期检查服务器以查看是否有任何新消息到达)似乎没问题,除非为了获得良好的用户体验,我的我的服务器轮询必须像5秒左右一样,这就像疯了一样咀嚼电池.这是使用这种方法的主要缺点.

所以,我想知道有一个更好的方法,我不知道.请任何帮助,架构结构,任何有用的东西.

解决方法

你应该看一下使用XMPP.你可以在Android XMPP上搜索StackOverflow,你最终可能会推荐使用某些Smack(一个XMPP客户端库)的变种 here.

更新以发表评论:

首先,XMPP是一种协议,而不是客户端或服务器.使用它的一个好处是可以广泛使用XMPP客户端和服务器实现. Wikipedia article解决了大部分问题.

关于你对gtalk的评论:

The architecture of the XMPP network is similar to email; anyone can run their own XMPP server and there is no central master server.

关于民意调查:

XMPP Could use HTTP in two ways: polling[21] and binding.[22] The polling method,Now deprecated,essentially implies messages stored on a server-side database are being fetched (and posted) regularly by an XMPP client by way of HTTP ‘GET’ and ‘POST’ requests. With HTTP binding,the client uses longer-lived HTTP connections to receive messages as soon as they are sent. This push model of notification is more efficient than polling,where many of the polls return no new data.

它也可以使用WebSockets.

关于.NET集成(如果你需要它…如果你不需要,你可以运行自己的XMPP服务器),你可以只搜索StackOverflow for XMPP和.NET,你可以得到一些关于.NET服务器的问题/想法与XMPP服务器集成,如此问题:Opensource .Net Jabber/XMPP server?

在android中创建聊天应用程序的最佳做法是什么的更多相关文章

  1. ios – XMPP应用终止而不是回复消息

    我在XMPP应用程序中工作.当我终止并杀死我的应用程序时,1)XMPP服务器中未连接用户.用户离线.但我希望用户连接和在线.喜欢WhatsApp(应用).2)我当时无法从XMPP服务器端获取任何消息,这种方法不是调用.那么,我如何获得消息?

  2. XMPP iOS框架检测与OpenFire服务器的互联网断开连接问题

    我已经使用XMPPiOS框架与OpenFire服务器实现聊天应用程序.幸运的是,应用程序正在运行,但我在应用程序中面临一个互联网断开的问题.当用户正在注销或手动进入离线模式时,它会将节发给他/她的名单.所以他/她的名单知道用户进入离线模式.现在当互联网从用户设备断开连接时,由于互联网断开,应用程序无法向服务器发送存在节.所以他/她的名单将不会获得关于该离线用户的信息,用户将只显示在线模式.我认为像

  3. 添加WebViewClient时,Android WebView忽略target =“_ blank”

    因为我有15个链接,我需要比较.我无法在新浏览器中加载所有网址,因为有一些链接需要在同一个WebView中打开.解决方法我有一个解决方法的想法.使用自定义架构替换应在新窗口中打开的所有链接.然后你可以自己处理.对于最小的中断设置,还可以设置自定义主题并处理所有配置更改:然后在链接处理程序中,您可以使用getIntent().getData()读取url.还请记住,你应该处理http和https,我在上面的简短例子中跳过了.这是一个如何重写网址的JavaScript示例:

  4. android – 尝试commitAllowingStateLoss时的FragmentManager NullPointerException

    上下文:我有一个带片段的活动和3个InnerFragments.当调用FragmentonDestroy()时,我想从FragmentManager中删除内部片段.onDestroy()的代码如下.问题:FragmentManager抛出NullPointerException,可能是在调用commitAllowingStateLoss()时.我不明白为什么.堆栈跟踪:解决方法FragmentMa

  5. Android架构组件ViewModel – 如何在测试Activity上模拟ViewModel?

    我正在尝试设置类似于GithubbrowserSample的UI测试,看起来示例项目只有Frag的模拟viewmodel而不是Activity的示例.这是我的代码,我试图通过模拟viewmodel来测试Activity.但viewmodel未在Activity中的onCreate()之前设置.有人可以帮我解决这个问题吗?解决方法JUnit@Rules在@Before方法之前进行设置,因此您的活动在

  6. android – 开发支持蓝牙技术的跨移动应用程序的最佳方法是什么?

    我已经阅读了Phonegaphere的原生功能支持.显然,它没有提到蓝牙支持.我没有找到或找到任何其他具有跨移动平台开发支持的平台.结果,我目前面临两种选择.>为所有平台独立构建>找到合适的跨平台开发解决方案.我的问题是;对于那里的移动开发者,你建议我选择哪个选项,这里没有列出?

  7. 在android中创建聊天应用程序的最佳做法是什么

    我打算创建一个Android聊天应用程序.实际上聊天将成为应用程序的一项功能.我想知道有关Android聊天应用程序的最佳实践.我熟悉的两个选项是C2MD,每隔几秒就会对服务器db进行一次自定义轮询.现在,我知道C2MD本来应该是伟大的,但根据我的理解,它并不可靠.我试图实现它,它似乎没有工作.此外,如果由于某种原因谷歌结束时发生了某些事情(就像他们的服务器已关闭–不太可能但可能发生)我无法联系他

  8. Android Build Tools无论如何都只构建x86_64. APK通过adb安装,但在Play商店中显示不兼容

    所以这发生了.无论我在build.gradle上做什么,所有的APK都会以native_code=’x86_64’标志出来,所以当我将应用程序部署到商店时,结果是有15K不兼容的设备,只有19兼容.我首先想到,不知何故,安装NDK是原因,或者我修改后的构建脚本.但是当我通过GenerateSignedAPK向导时,它仍然会发生.分裂块也最初缺失,并没有帮助.最奇怪的是,当我通过控制台推送安装时,IT工作!

  9. android – 为什么我们需要onUpgrade(); SQLiteOpenHelper类中的方法

    我正在遵循这个教程可以任何身体请让我清楚这段代码.问题onUpgrade()的目的是什么;方法?重要为什么我们在这个方法中删除表并重新创建?提前致谢.解决方法onUpgrade基本上用于处理任何新版本应用程序的新数据库更改.在onUpgrade中并不总是需要删除表,这取决于您的用例.如果要求不要保留旧版本应用程序中的数据,那么drop应该会有所帮助,但是如果它更改架构那么它应该只有更改脚本.

  10. Smack(XMPP)聊天应用程序的Android后台服务

    我正在使用asmack库实现一个聊天应用程序.我想启动一个始终运行的服务,其中所有的连接管理任务都要完成,并且应该继续接收传入的数据包并将消息保存在我的sqlite数据库中.当我的应用程序启动时,我希望我的应用程序也会收到通知,而后台服务将消息插入sqlite数据库.如何用粘性服务实现这种结构.是否还需要部分唤醒锁定.因为,有时也会根据特定需求使用http来下载图像.解决方法您可以在服务器上注册后

随机推荐

  1. bluetooth-lowenergy – Altbeacon库无法在Android 5.0上运行

    昨天我在Nexus4上获得了Android5.0的更新,并且altbeacon库停止了检测信标.似乎在监视和测距时,didEnterRegion和didRangeBeaconsInRegion都没有被调用.即使RadiusNetworks的Locate应用程序现在表现不同,一旦检测到信标的值,它们就不再得到更新,并且通常看起来好像信标超出了范围.我注意到的一点是,现在在logcat中出现以下行“B

  2. android – react-native动态更改响应者

    我正在使用react-native进行Android开发.我有一个视图,如果用户长按,我想显示一个可以拖动的动画视图.我可以使用PanResponder实现这一点,它工作正常.但我想要做的是当用户长按时,用户应该能够继续相同的触摸/按下并拖动新显示的Animated.View.如果您熟悉Google云端硬盘应用,则它具有类似的功能.当用户长按列表中的任何项目时,它会显示可拖动的项目.用户可以直接拖

  3. android – 是否有可能通过使用与最初使用的证书不同的证书对其进行签名来发布更新的应用程序

    是否可以通过使用与最初使用的证书不同的证书进行签名来发布Android应用程序的更新?我知道当我们尝试将这样的构建上传到市场时,它通常会给出错误消息.但有没有任何出路,比如将其标记为主要版本,指定市场中的某个地方?解决方法不,你不能这样做.证书是一种工具,可确保您是首次上传应用程序的人.所以总是备份密钥库!

  4. 如何检测Android中是否存在麦克风?

    ..所以我想在让用户访问语音输入功能之前检测麦克风是否存在.如何检测设备上是否有麦克风.谢谢.解决方法AndroidAPI参考:hasSystemFeature

  5. Android – 调用GONE然后VISIBLE使视图显示在错误的位置

    我有两个视图,A和B,视图A在视图B上方.当我以编程方式将视图A设置为GONE时,它将消失,并且它正下方的视图将转到视图A的位置.但是,当我再次将相同的视图设置为VISIBLE时,它会在视图B上显示.我不希望这样.我希望视图B回到原来的位置,这是我认为会发生的事情.我怎样才能做到这一点?编辑–代码}这里是XML:解决方法您可以尝试将两个视图放在RelativeLayout中并相对于彼此设置它们的位置.

  6. android – 获得一首歌的流派

    我如何阅读与歌曲相关的流派?我可以读这首歌,但是如何抓住这首歌的流派,它存放在哪里?解决方法检查此代码:

  7. android – 使用textShadow折叠工具栏

    我有一个折叠工具栏的问题,在展开状态我想在文本下面有一个模糊的阴影,我使用这段代码:用:我可以更改textColor,它可以工作,但阴影不起作用.我为阴影尝试了很多不同的值.是否可以为折叠文本投射阴影?

  8. android – 重用arm共享库

    我已经建立了armarm共享库.我有兴趣重用一个函数.我想调用该函数并获得返回值.有可能做这样的事吗?我没有任何头文件.我试过这个Android.mk,我把libtest.so放在/jni和/libs/armeabi,/lib/armeabi中.此时我的cpp文件编译,但现在是什么?我从objdump知道它的名字编辑:我试图用这个android.mk从hello-jni示例中添加prebuild库:它工作,但libtest.so相同的代码显示以下错误(启动时)libtest.so存在于libhello-j

  9. android – 为NumberPicker捕获键盘’Done’

    我有一个AlertDialog只有一些文本,一个NumberPicker,一个OK和一个取消.(我知道,这个对话框还没有做它应该保留暂停和恢复状态的事情.)我想在软键盘或其他IME上执行“完成”操作来关闭对话框,就像按下了“OK”一样,因为只有一个小部件可以编辑.看起来处理IME“Done”的最佳方法通常是在TextView上使用setonEditorActionListener.但我没有任何Te

  10. android – 想要在调用WebChromeClient#onCreateWindow时知道目标URL

    当我点击一个带有target=“_blank”属性的超链接时,会调用WebChromeClient#onCreateWindow,但我找不到新的窗口将打开的新方法?主页url是我唯一能知道的东西?我想根据目标网址更改应用行为.任何帮助表示赞赏,谢谢!

返回
顶部