2014-06-25 37 views
3

我发展必须以这种方式与其他应用程序的应用程序:URL方案

  1. 第一应用有一个按钮,通过一个URL方案,将打开第二个应用程序并传递两个参数(用户和密码)。

  2. 第二个应用程序验证这些参数,并提供访问权限,如果他们是好的。

这个制度运作良好,如果第二个应用程序无法打开,但如果第二个应用程序已经打开(背景),并从不同的用户名和密码的第一个应用程序调用,不工作(网址当然,AppDelegate中的Scheme方法只被调用一次)。

有什么办法可以让第二个应用程序获得新的参数甚至已经打开?

谢谢。

回答

3

有案件当你的第二个应用程序被另一个应用程序调用。

在这两种情况下,您的第二个应用将收到一个NSURL对象。

您必须实现2方法在AppDelegate.mHERE#1HERE#2

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
//....... 
//....... 

NSURL *url = launchOptions[UIApplicationLaunchOptionsURLKey]; 
if (url) 
{ 
    //OK, it means that app is being called via URL Schema 
    //..... HERE #1 
} 

//....... 
//....... 
} 

- (BOOL)application:(UIApplication *)application 
      openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication 
     annotation:(id)annotation 
{ 
    //............... HERE #2 
} 
+0

谢谢,它的工作原理就像一个魅力。 – RFG

1

在UIApplicationDelegate有

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 

Asks the delegate to open a resource identified by URL. 

根据该文档,该方法后应用程序调用中:didFinishLaunchingWithOptions:当后者方法返回YES。如果你的应用程序已经打开,只有这个方法被调用。

此方法的实施应该打开指定的URL并且 相应地更新其用户界面。如果您的应用必须启动 才能打开网址,应用程序将调用 应用程序:willFinishLaunchingWithOptions:和 应用程序:didFinishLaunchingWithOptions:方法优先,然后是 此方法。这些方法的返回值可用于防止调用此方法。 (如果应用程序已经在运行,只有 该方法被调用。)