已打开的应用中的URL方案

时间:2014-06-25 07:08:04

标签: ios xcode parameter-passing url-scheme

我正在开发一个必须以这种方式与另一个应用相关的应用:

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

  2. 第二个应用验证这些参数,并在他们确定的时候提供访问权限。

  3. 如果第二个应用程序没有打开,系统运行良好,但是如果第二个应用程序已经打开(在后台)并且是从具有不同用户和密码的第一个应用程序调用的,则不起作用(URL Scheme方法)在AppDelegate中,当然只调用一次。

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

    谢谢。

2 个答案:

答案 0 :(得分:3)

当您的第二个应用被另一个应用调用时,有 2 个案例。

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

您必须在AppDelegate.m中实施2方法(此处#1 此处#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
}

答案 1 :(得分: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和   相应地更新其用户界面。如果您的应用程序必须启动   要打开URL,应用程序会调用   应用程序:willFinishLaunchingWithOptions:和   application:didFinishLaunchingWithOptions:方法首先,然后是   这种方法。这些方法的返回值可用于防止   这种方法被称为。 (如果该应用已经在运行,则仅限   这个方法叫做。)