Вызов openURL из виджета «Сегодня» открывает приложение, но не вызывает application:openURL:sourceApplication:annotation:

Я установил расширение «Сегодня» для своего содержащего приложения.

Вот код:

TodayViewController:

[self.extensionContext openURL:[NSURL URLWithString:[NSString stringWithFormat:@"idaxiang://action=%ld",(long)aCell.tag]] completionHandler:^(BOOL success) {
NSLog(@"open url result:%d",success);}];

AppDelegate.m:

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

  NSString* prefix = @"idaxiang://action=";

  if ([ElephantUtils originString:[url absoluteString] withTargetString:prefix]) {

    if ([[url absoluteString] rangeOfString:prefix].location != NSNotFound) {
        NSString* action = [[url absoluteString] substringFromIndex:prefix.length];

        UINavigationController *navc  = (UINavigationController *)application.keyWindow.rootViewController;
        if (navc.viewControllers.count > 1) {
            [navc popToRootViewControllerAnimated:NO];
        }
        ElephantHomeViewController *homeVC = (ElephantHomeViewController *)navc.topViewController;
        [homeVC PushToSpecificArticle:[action integerValue]];            
    }
  return [[Diplomat sharedInstance] handleOpenURL:url];
}

Но странно то, что если содержащее приложение не открыто (не загружается в память), я касаюсь ячейки из расширения «Сегодня», приложение откроется, но не сможет вызвать application:openURL:sourceApplication:annotation:, поэтому оно не будет нажимать на целевой контроллер просмотра. Но теперь приложение открыто (загружено в память), я нажимаю на ячейку из расширения «Сегодня», содержащее приложение вызовет application:openURL:sourceApplication:annotation: и успешно нажмет на целевой контроллер просмотра.

Вот мой info.plist:

    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLName</key>
        <string>com.smartisanelephant.www</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>idaxiang</string>
        </array>
    </dict>

Пожалуйста, дайте мне несколько советов, я боролся с этой проблемой в течение нескольких дней. Спасибо большое!


person KittenYang    schedule 15.09.2015    source источник
comment
application:openURL:sourceApplication:annotation: обязательно должен вызываться при запуске приложения через схему URL. Вы уверены, что он не вызывается? Возможно, в вашем коде анализа URL есть ошибка?   -  person Christopher Pickslay    schedule 16.09.2015


Ответы (1)


У меня недостаточно репутации, чтобы комментировать, но

вызывается ли этот метод, когда вы пытаетесь запустить его из расширения?

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
person Andrei Malygin    schedule 15.09.2015
comment
Я отлаживаю его из журнала устройств, но он не вызывает - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url при запуске приложения. - person KittenYang; 16.09.2015