【问题标题】:Upstream Files Using Google Cloud Messaging Cloud Connection server(XMPP)使用 Google Cloud Messaging Cloud Connection server (XMPP) 上传文件
【发布时间】:2014-06-02 06:26:03
【问题描述】:

我正在使用 GCM 云连接服务器实现实时聊天。 我已经阅读了文档Upstream messages Using GCM。我学会了如何通过 GCM 将消息上传到我的服务器。众所周知,它比通过 http 向网络服务器发送消息更可靠。

但现在我也想在聊天中上传文件。但问题是 GCM 只允许上传最大 4KB 的消息。我可以使用 web 服务或 FTP 将文件上传到服务器,然后通过 GCM 将文件名传递给服务器。但我想要更合适的解决方案。那么有什么方法可以通过 GCM 云连接服务器来做到这一点。??

提前感谢您的帮助。

【问题讨论】:

  • 如果你想开发像whatsAPP这样的聊天应用程序,你必须创建自己的服务器广告离开gcm。因为GCM只允许4kb
  • @Nirav Tukadiya...我正在我的应用程序中实施 CCS。我设置了服务器。我在 android 中使用代码,但是我对流程有点困惑。问题 1:- 是否可以在没有服务器首先向设备发送下游消息的情况下向服务器发送上游消息?问题2:-流程如何开始,获得设备ID后我应该做什么,我应该像在正常GCM中那样通过HTTP Post将其发送到我的服务器还是有其他方式?问题 3:- 如果我有 50 个用户,如何识别消息,那么设备如何识别特定消息是否来自特定用户?

标签: android google-cloud-messaging


【解决方案1】:

我在这种情况下使用的解决方案是:

1 - 使用 loopj library 通过 POST 将文件发送到我的服务器 (php p.ex)

// loopj supports Http Auth, cookies, params, multipart files, etc. So is a good solution. Like:

...     
AsyncHttpClient client = new AsyncHttpClient();
client.addHeader("Authorization", "Basic " + Base64.encodeToString("aaa:bbb".getBytes(), Base64.NO_WRAP));

RequestParams params = new RequestParams();
params.put("cmd", "upp");
params.put("uid", Long.toString(getUser().getId()));
params.put("tid", Long.toString(getUser().getIdTeam()));
try{
  params.put("avatar", file); // File object
}catch(FileNotFoundException e){
  ...
}

SharePhotoHandler handler=new SharePhotoHandler(mContext,file,notificate);
client.post(URI_BASE, params, handler);
...

我使用自定义处理程序来控制应用程序可以控制的文件上传(SharePhotoHandler.class)

  • 成功
  • onFailure
  • 完成
  • ...

这个方法必须让你控制上传/下载文件的状态(ok、error、uploading、downloading等)

文件上传后,服务器必须通知其他客户端有新文件要下载,或者在您的“onSuccess”方法上向其他客户端发送 GCM 消息。在我的例子中,服务器将文件名(+URL)发送给其他客户端以供下载。

【讨论】:

  • 你好伙计。正如我在问题中已经提到的,我不想使用 web 服务或 FTP 将文件上传到服务器。我想通过 GCM 云连接 server.can 将文件上传到我的服务器。你建议我做点什么?谢谢。
  • 所以,另一种解决方案是使用 code.google.com/p/p2p-communication-framework-for-android 。我从未尝试过,但它只通过 BT 连接,如 P2PWifi 连接。对于您的情况,我不知道任何其他解决方案:((以及用于通过节发送文件的 XMPP 服务器不正确,并且您还需要保留服务器)
【解决方案2】:

你问过:

那么有没有办法通过 GCM 云连接服务器来做到这一点。??

对于大于 ~4k 的文件,答案是 - 不!

说明: GCM 机制包含大量服务器和带宽,这使 Google 花费了很多钱。尽管如此,Google 还是免费提供了这项全球服务,以鼓励开发者和用户使用 Android,让他们获得更高效的体验。

Google 知道安装 10 多个应用程序,而每个应用程序都必须打开与不同服务器的连接才能获得更新,这会降低设备速度并消耗昂贵的带宽。所以他们实施了 GCM 的解决方案,这样每台设备只有一个服务(谷歌的)不断搜索更新(而不是很多)。

由于它是一项免费服务,Google 已将该服务最小化为 4k 数据。这已经足够好了,因为应用程序将收到更新等待的通知,然后可以连接到其公司的服务器以获取这些更新(而不是不断地搜索它们)。

【讨论】:

    猜你喜欢
    • 2014-12-25
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 2016-08-07
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    相关资源
    最近更新 更多