Приложения, поддерживающие многозадачность в iOS 4 и пользовательских схемах URL - PullRequest
4 голосов
/ 05 июля 2010

Я пытаюсь реализовать OAuth безопасно, как подробно описано здесь: http://fireeagle.yahoo.net/developer/documentation/oauth_best_practice#custom-url-osx. Кажется, я наткнулся на камень преткновения, так как не могу понять, как обрабатывать URL-адрес, который запускает мое приложение в фоновом режиме.

Я зарегистрировал свое приложение для обработки oauthtest.Я подтвердил, что oauthtest: // и oauthtest: // callbacktest одновременно запускают мое приложение и работают, как задумано, когда мое приложение не работает в фоновом режиме.

Я реализую

application:(UIApplication *) didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

который успешно вызывается, когда мое приложение запускается холодно.Я могу легко получить URL, переданный моему приложению.

Однако, если мое приложение уже работает в фоновом режиме, ни

application:(UIApplication *) didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

, ни

application:(UIApplication *) handleOpenURL:(NSURL *)url 

невызвал, и у меня нет никакого способа получить параметры, переданные моему приложению как часть URL.

Кто-нибудь знает, как получить параметры, переданные фоновому приложению по пользовательской схеме URL?

Мне известно, что я мог бы обойти эту проблему, отключив многозадачность, но я бы не стал этого делать по понятным причинам.Заранее спасибо.

1 Ответ

7 голосов
/ 07 июля 2010

Вот пример кода, который, как мне показалось, работает для меня, протестированный в iOS4:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
     NSLog(@"handleOpenURL - %@", [url absoluteURL]);
     return YES;    
}

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    NSLog(@"applicationDidFinishLaunching");
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSLog(@"didFinishLaunchingWithOptions - %@", [launchOptions objectForKey:@"UIApplicationLaunchOptionsURLKey"]);
    return NO;
}

Если я запускаю приложение в первый раз, didFinishLaunching: обрабатывает URL. Если затем я помещу приложение в фоновый режим, вернусь в Safari и коснусь ссылки, которая возвращает приложение на передний план, тогда handleOpenURL: позаботится об URL. Удачи!

...