2010-03-12 64 views
1

在iphone安全架构上工作时,我开始知道我可以在iphone中运行其他应用程序的应用程序。参考以下网址http://iosdevelopertips.com/cocoa/launching-other-apps-within-an-iphone-application.htmliPhone外壳 - 有没有?

例如,我可以把一个网站的链接与以下超链接 SKYPE:// 将导致Skype的运行,并在特定的号码打电话。现在我在这里几乎没有顾虑。

  • 是否有一个shell在iphone的后台运行,以便它允许其他应用程序运行基本的应用程序命令。
  • 如果上面的语句是真的,那么我怎么能启用或运行命令直接进入iphone外壳?
  • 如果上面的语句是错误的,那么你能否解释一下这些命令是如何执行的?
  • 是这部分的iPhone SDK?或本funcationality是iPhone OS
+0

PS:我不是在谈论** jailbroken ** iphone :) – 2010-03-12 04:23:51

+2

它是SDK的一部分。您可以要求您的应用程序处理一个URL。当它这样做时,它会检查URL的方案并确定* something *。例如,如果该方案是sms://它将打开消息应用程序。你的应用程序也可以有一个方案和URL,在这种情况下,它将打开该应用程序。它不会通过外壳执行命令,除非您将手机越狱安装一个,否则没有外壳。 – 2010-03-12 04:28:20

+0

这不是一个真正的编程问题,tho。 – 2010-03-12 04:30:29

回答

5

这是iPhone OS的功能。应用程序将自己注册为特定协议的URL处理程序。在这种情况下,Skype应用程序被注册以处理skype:// URL协议。

  • 应用程序通过其Info.plist中的CFBundleURLTypes项将自己注册为协议处理程序。请参阅here
  • 安装应用程序时,操作系统读取此密钥。
  • 只要遇到并点击该协议的URL,操作系统就会启动您的应用程序,您的应用程序委托将发送application:handleOpenURL:消息。
  • 然后由您的应用程序正确解码URL并执行正确的操作。

PS。 Mac OS X中提供了几乎相同的功能,还可以将URL发送到已运行的应用程序。

+0

是有道理的。最后一个问题。如果我在浏览器地址栏中输入命令skype://,那么它不起作用(即不打开skype),但如果我在网站上使它成为链接,那么它工作正常。有人可以解释吗? – 2010-03-12 05:57:26

+0

这应该工作,它对我有用。你在什么操作系统版本? – 2010-03-12 06:07:57

0

alee询问的是什么,我想是“mailto://”。当你把它放在浏览器的地址栏中时,它什么也不做,但是如果你把它作为一个链接并点击它,它就会发送邮件应用程序。为什么邮件应用程序有这种行为?

2

Shell可以用systempopen等。当然催生,因为应用程序的沙盒,fork()被拒绝,因此外壳不会从任何AppStore的应用程序访问。

但是,在iPhoneOS上有很多东西在后台运行。其中之一是SpringBoard.app,这是您在启动时看到的“主屏幕”。实际上,SpringBoard.app负责更多的东西,而不仅仅是显示主屏幕,其中之一是接收和发送URL请求。

登记过程已由@Alan描述。但在引擎盖,当URL请求是由应用程序发出的,会发生以下情况:

  1. 的应用程序,知道自己不能处理特定的网址,电话-[UIKit openURL:]委派打开请求给他人。
  2. UIKit会将URL请求打包到GSEvent(IPC机制)中,然后将其分发到SpringBoard。
  3. SpringBoard,收到此GSEvent,请致电-[SpringBoard applicationOpenURL:]
  4. 这种方法将检查URL是否正确和安全(例如,像tel://*5005*78283#这样的东西将被拒绝)。如果它是有效的,将执行该动作(拨打号码,订阅日历,打开应用程序等)