2015-12-03 85 views
0

好吧我覺得我接近這裏的解決方案。我想我一定會想念一些小事。希望你能幫助你。自定義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語句內部運行。我想知道我做錯了什麼。我很樂意回答有關我可能錯過的任何問題。這一直困擾着我整天。希望得到某種指導。提前致謝。 。

+0

您需要'LSApplicationQueriesSchemes'和給定方案在調用'canOpenURL:'的給定方案的應用程序中。 – rmaddy

+0

僅供參考 - 您的方法名稱錯誤。你有'application:OpenURL:sourceApplication:annotation:'。 「Open」中的「O」必須是「o」。案件事宜。 – rmaddy

+0

請注意,爲了匹配LSApplicationQueriesSchemes列表,這些方案是區分大小寫的。 'CustomUrl'條目不會匹配對'... openURL:[NSURL URLWithString:@「customURL」]]'的調用。 – Avi

回答

0

講究if ([[url scheme] isEqualToString:@"TurnOffRelay://"]) URL方案TurnOffRelay而不是TurnOffRelay://

+0

我已經嘗試過兩種。仍然沒有運氣。 – HardLuckHank

0

因此,將OpenURL更改爲openURL,然後注意到sourceApplication名稱錯誤。我在猜測,如果我輸入了正確的應用程序來使用,那麼「調用」If程序塊將正確進行的應用程序的實際名稱。但我也確定,如果我沒有改變openURL,我會再次被卡住。

感謝您的幫助。它現在按預期工作。