从Today小部件调用openURL会打开应用程序,但不会调用应用程序:openURL:sourceApplication:annotation:

时间:2015-09-15 14:37:46

标签: ios ios8-today-widget openurl

我为包含应用程序设置了今日扩展程序。

以下是代码:

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:,因此它将会不推送到目标viewcontroller。但现在,应用程序已打开(已加载到内存中),我从Today Extension中点击单元格,包含应用程序将调用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>

请给我一些建议,我已经困扰了这个问题好几天了。谢谢!

1 个答案:

答案 0 :(得分:0)

我没有足够的声誉发表评论,但

当您尝试从扩展程序启动它时会调用此方法吗?

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