【问题标题】:Custom URL schemes ios 9自定义 URL 方案 ios 9
【发布时间】:2015-12-03 00:11:53
【问题描述】:

好的,我想我已经接近解决方案了。我想我一定错过了一些小东西。希望你们能帮忙。'

我正在尝试让另一个应用程序打开另一个自定义应用程序并运行该应用程序中通过 URL 方案调用的方法。我知道在 ios 9 中,他们在 info.plist 中定义了密钥

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>URLScheme0</string>
    <string>URLScheme1</string>
    <string>URLScheme2</string>
    ect....
</array>

我认为我做得很好。虽然我想确认这件事和其他事情。首先,我是否将其添加到“呼叫”应用程序或“接收”应用程序的 info.plist 中,或两者兼而有之?因为,我现在拥有它,两者兼而有之。当我从调用应用程序 plist 中删除它时,我收到错误消息。

“此应用不允许查询scheme xxx”

请记住,我还在接收应用程序的 plist 中包含了具有相同方案名称的 URL 类型和 URL 方案数组。

调用应用程序我有一个使用此方法代码映射的按钮:

- (IBAction)killMethod:(id)sender {

NSString *customURL = @"TurnOffRelay://";

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]]) {

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];

} else {

    UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"URL error" message:@"No custom URL defined for Kill Relay" preferredStyle:UIAlertControllerStyleAlert];

    [self presentViewController:alert animated:YES completion:nil];

}

}

对于我在 appDelegate.m 中的接收应用程序:

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

NSLog(@" Calling application: %@", sourceApplication);
NSLog(@"URL scheme: %@", [url scheme]);

if ([sourceApplication isEqualToString:@"net.ble.relay"]) {

    if ([[url scheme] isEqualToString:@"TurnOffRelay://"]) {

        ViewController *viewController = [[ViewController alloc] init];
        [viewController killSwitch];

        NSLog(@"Running killSwitch");

    }

return YES;

}

else

    return NO;

}

通过我现在正在运行的内容,我可以实际按下“呼叫”应用程序中的按钮,然后从那里打开“接收”应用程序,但是唉,我想要运行的方法没有在内部运行if 语句。我想知道我做错了什么。我很乐意回答任何关于我可能错过的事情的问题。这一直困扰着我一整天。想要一些指导。提前致谢。

【问题讨论】:

  • 您需要LSApplicationQueriesSchemes 和应用程序中的给定方案,该方案在给定方案上调用canOpenURL:
  • 仅供参考-您的方法名称错误。你有application:OpenURL:sourceApplication:annotation:Open 中的 O 必须是 o。案件很重要。
  • 请注意,为了匹配LSApplicationQueriesSchemes 列表,这些方案区分大小写。 CustomUrl 的条目与对 ...openURL:[NSURL URLWithString:@"customURL"]] 的调用不匹配。
  • 我已经对 LS 和 URL 方案的大小写进行了三次检查。我将测试小写的 openURL。回来吧。

标签: ios objective-c url


【解决方案1】:

注意if ([[url scheme] isEqualToString:@"TurnOffRelay://"])。url scheme是TurnOffRelay而不是TurnOffRelay://

【讨论】:

    【解决方案2】:

    所以,在将 OpenURL 更改为 openURL 之后,注意到 sourceApplication 名称错误。我猜如果我输入了正确的应用程序来使用,例如,“调用”If 块的应用程序的实际名称将正确进行。但我也确信,如果我没有更改 openURL,我会再次陷入困境。

    感谢您的帮助。它现在按预期工作。

    【讨论】: