【问题标题】:Connecting iOS app to Windows/Linux apps将 iOS 应用程序连接到 Windows/Linux 应用程序
【发布时间】:2013-08-23 14:46:54
【问题描述】:

背景:

我即将开始开发移动和桌面应用程序。它们都将连接到本地 wifi 网络(没有互联网连接),并且需要相互通信。一开始,我们将 iOS 和 Windows 定位为两个平台,目的是按顺序添加 Linux、OSX 和 Android 支持。桌面应用程序主要是一个数据库服务器/通知中心,用于接收来自 iOS 应用程序的更新并将数据发送到其他 iOS 应用程序。桌面应用程序可能有一个前端,但如果需要,我们也可以将其合并到 iOS 应用程序中。

目前我们只希望 iOS 应用程序自动检测它何时与服务器位于同一网络上,然后显示该服务器发送的数据(类似 bonjour)。

据我所知,我们可以采取两条路径来实现这一点

  1. 为每个平台(Windows、Linux、OSX)创建一个完全原生的应用程序。 Pro:我们喜欢使用本地应用程序来提高性能和易于安装的想法。 缺点:我对 Windows 或 Linux 开发一无所知。

  2. 创建一个使用 Web 技术(可能是 python)构建的应用程序,并创建一个易于使用的安装程序,该安装程序将在桌面计算机之外创建一个本地服务器,移动应用程序可以与之通信。 优点:大部分开发都是跨平台的,安装程序应该很容易移植。 缺点:如果我们确实想向服务器应用程序添加前端,它将不是平台原生的,而是使用 css+html+javascript GUI。

问题:

我的问题是如何在每种情况下实现 iOS 应用和服务器应用之间的连接。

  1. 如何通过本地网络接收和发送通知。

  2. 如果没有静态 ip,如何使用 NSURLConnection 连接到服务器?


我希望这很清楚。如果不是,请询问,我会澄清。

2013 年 9 月 6 日更新

希望这能解决问题。我需要一个桌面应用程序来管理数据库,该应用程序将连接到未连接到互联网的本地无线网络上的 iOS 设备。我可以使用 http 协议(最好使用烧瓶应用程序)或使用应用程序和服务器之间的直接套接字连接来做到这一点。我的问题是以上两种选择中哪一种最好?我的偏好是使用 Python+Flask 的基于 Web 的应用程序,但我不知道如何将 iOS 应用程序连接到在本地网络上运行且没有静态 IP 的烧瓶应用程序。对此的任何建议将不胜感激。

【问题讨论】:

  • 好吧,我想你可以尝试从 192.168.1.* 连接到 192.168.1.*,在 Web 服务器上做出简单的响应,当 iOS 客户端尝试连接时,服务器发送欢迎响应。
  • 使用桌面windows机器你可以使用域,例如http://my-server/my_web_app,当然,iOS不能连接到windows域。并非没有一些疯狂的技巧。因此 windows 域 = 不可用。
  • 可能存在措辞问题。您真的在谈论 APNS 意义上的系统通知吗?如果是的话,我真的怀疑苹果会让你绕过它的服务器(假设这甚至是远程可能的)
  • @Alex 我刚刚试图通过更新来澄清这个问题。
  • 好的,知道了。因此,除非您的应用程序已经在前台运行,否则我认为这是不可能的。 iOS 上只有一种通知机制,您无法创建自己的通知机制,以便它唤醒、启动您的应用程序或发送后台通知。您可以让您的应用程序在后台运行,但有 5 分钟的限制。对您的问题不是很有用。您是否可以使用公司代理来允许 apns 通过,同时阻止所有其他 Internet 连接?

标签: python ios windows web bonjour


【解决方案1】:

如果没有应用程序或框架的任何细节,很难说得含糊不清并为您指明正确的方向。如果您已经探索过 Bonjour/Zeroconf 以将 iPhone 连接到服务器,我会继续往下看。

首先要看PyBonjour,了解如何从 Python 广播服务器。尽管在 Windows、Mac 和 Linux 上如何配置它存在一些问题,但这将是轻微的。例如,对于 Windows,用户需要安装 Bonjour for Windows,而 Linux 用户需要 Avahi,但大部分都可以在安装过程中进行设置。

其次,查看Bonjour documentation for iOS,这将更容易,因为它都内置在系统和 API 中。从这里开始,服务器和客户端都可以相互发现。

最后一个问题是确定您是否希望 iPhone 连接到服务器,反之亦然,以及如何连接。然而,这些都是基本的网络决策,或多或少是主观的。

由于您已表明偏好 Web 开发,因此您可以轻松地将 iPhone 连接到 Flask 服务器并使用 HTTP/HTML 技术从服务器检索详细信息。

关于通知,除非客户端 A 的数据更改意味着客户端 B 绝对需要知道数据的更改,否则我不会担心。下次客户端 B 连接到服务器时,可以在那个时候推送正确的数据,而不用担心通知服务。如果其他客户确实需要了解更改,则另一种解决方案可能只是向他们提供建议并提示他们打开应用程序的常规旧电子邮件。

【讨论】:

    【解决方案2】:

    我肯定会推荐一个 webapp。您的问题的答案如下:

    如何通过本地网络接收和发送通知。

    使用基于 REST 的 Web 服务与服务器进行通信。 您必须使用轮询来接收数据:-(

    如果没有静态 ip,我如何使用 NSURLConnection 连接到服务器?

    1. 如果可能,请在您的网络中配置一个指向服务器 ip 的域名。 (配置本地 DHCP,每次都根据 mac 地址为您的服务器提供相同的 IP!)
    2. 有一个 IP 范围,当应用启动时,尝试访问一个特定的 URL 并检查它是否有响应。
    3. 每次应用启动时要求用户输入服务器IP!

    【讨论】:

    • 如果您以后计划支持 android、windows 设备,请远离 Bonjour。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多