代码之家  ›  专栏  ›  技术社区  ›  Lucky

一个iPhone应用程序能获得独家控制权吗?或者能可靠地记录它失去控制的原因吗?

  •  1
  • Lucky  · 技术社区  · 15 年前

    我正在尝试确定(潜在的)项目中所需的某些特性的可行性。我还没有找到一个方法,只是一个可以做的。我为任何含糊不清和无知道歉:前者是因为保密协议使苹果的保密协议看起来像GPL,后者是因为我没有iPhone或Mac的经验。

    我确实非常了解Objective-C和Interface Builder(回到NextStep)以及一些PDA开发经验,所以我可能会理解答案,即使我的问题很幼稚。我做了一些浏览,所以我知道一些流行语。

    我不能详细说明实际的项目,但我想出了一个蹩脚的类比。

    • 同一个房间中的大量用户被要求完成应用程序中的任务(比如拼图)。
    • 他们在监督下,但监察员不能密切监视他们。
    • 在完成申请之前,他们是不允许离开的。
    • 他们不能在任务期间发送/接收电话或消息。
    • 监视器在任务执行期间接收到各个步骤的通知。
    • 当任务完成或应用程序退出时,会通知监视器。
    • 应用程序发送心跳,因此监视器也知道信号是否丢失。
    • 越狱不是一种选择。
    • 该应用程序也应该在iPod touch上运行。

    所以我需要做的事情对我来说是危险的

    • 我可以关闭(或要求用户关闭)电话和短信,但仍然可以向我的服务器发送HTTP吗?
    • 我能阻止一个应用程序被关闭吗(即使报警应用程序触发或电话铃响)。
    • 失败预防,我能至少检测到这些事件并通知我的服务器吗?
    • 通知失败,我可以记录事件供监视器稍后检查吗?

    用户将意识到(实际上欢迎)这些限制。这是一个信任问题-用户不得寻求帮助或使用帮助应用程序来解决难题,并希望监视器(和其他竞争者)能够 知道 他没有。用户可以在开始时单击“OK,I understand and approve”(确定,我理解并批准)屏幕,但不适用于与服务器的每次通信。

    该应用程序将只与一个中央服务器(由我的公司运行)通信-监视器将无法购买服务器软件,服务器的URL将不可用户(或监视器)修改。

    嘿!这看起来像是参加考试的应用程序。不是我在做什么,但那也很酷!

    编辑——

    我更改了标题,并在问题中添加了更多的部分,部分基于MMC的答案。应用程序可能以脱机模式运行,必须执行以下操作:

    因此,使用测试类比,用户离线体验应该是这样的。

    1. 启动应用程序
    2. 应用程序下载测试问题、注册开始时间等。
    3. 关闭手机(如果应用程序无法自行完成)
    4. 禁用任何可能中断我的应用程序的应用程序(应用程序可以这样做吗?)
    5. 恢复并接受测试
    6. 指示测试完成(或完成最后一个问题)。
    7. 打开手机(如果应用程序无法启动)并重新启动应用程序(如果需要)。
    8. 应用程序上传测试结果和任何中断的日志。

    所以问题变成

    • 我确定我至少能记录下我不能阻止的任何中断吗
    • 我能知道中断的原因吗(电话接听、警报启动、用户启动)?
    • 是否可以阻止用户修改日志
    • 我能知道我启动时还有哪些应用程序在运行吗?(防止守护进程偶尔显示提示或其他内容。

    我仍然想运行与实时上传,所以其他一些想法出现在我的脑海中。

    • 如果我能可靠地检测和记录手机或其他应用程序的使用情况,那可能和阻止它一样好。
    • 用户是否可以阻止电话响铃,即使它是打开的(例如,呼叫转发+振铃器关闭)
    • 我的应用程序能知道铃声是否关了吗
    • 短信同样的问题
    • 如果我不能阻止它,用户可以忽略(无声)呼叫或消息而不离开我的应用程序。我的应用程序知道吗?
    1 回复  |  直到 15 年前
        1
  •  3
  •   mmc    15 年前

    听起来你最好把手机拿走,把它作为iPod touch的独家配件。

    你已经确定了你的麻烦所在。

    • 无法禁用电话功能,同时保持任何类型的网络功能(3G、WiFi或蓝牙)。如果您使用飞行模式禁用电话操作,则所有操作都将被禁用。
    • 没有办法阻止Home按钮返回SpringBoard
    • 您可以通知服务器应用程序过早中断(存在 applicationWillTerminate: 方法),但不可靠。如果操作时间过长,应用程序将被强制终止。
    • 您可以向本地文件系统写入发生过早中断的消息,这将更加可靠,因为此操作将更快。