好吧我覺得我接近這裏的解決方案。我想我一定會想念一些小事。希望你能幫助你。自定義URL方案ios 9
我想讓另一個應用程序打開另一個自定義應用程序,並運行該應用程序通過URL方案調用的方法。據我所知,在IOS 9他們把它manitory在info.plist中的關鍵
<key>LSApplicationQueriesSchemes</key>
<array>
<string>URLScheme0</string>
<string>URLScheme1</string>
<string>URLScheme2</string>
ect....
</array>
定義和我想我已經正確地做到這一點。雖然我想要確認這件事情和其他事情。首先,我是否將此添加到「調用」應用程序的info.plist或「接收」應用程序,或者兩者兼而有之?因爲,我現在擁有這兩個。當我從調用應用程序plist中刪除它時,我收到錯誤消息。
「這個程序是不允許查詢方案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];
}
}
和用於接收應用程序我有在APPD elegate.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:'的給定方案的應用程序中。 – rmaddy
僅供參考 - 您的方法名稱錯誤。你有'application:OpenURL:sourceApplication:annotation:'。 「Open」中的「O」必須是「o」。案件事宜。 – rmaddy
請注意,爲了匹配LSApplicationQueriesSchemes列表,這些方案是區分大小寫的。 'CustomUrl'條目不會匹配對'... openURL:[NSURL URLWithString:@「customURL」]]'的調用。 – Avi