Zanim zrobimy openUrl:
, aby uruchomić aplikację, która powinna oddzwaniać do mojej aplikacji (jak aplikacja działająca zgodnie ze specyfikacją x-callback-url), w jaki sposób mogę programowo sprawdzić, czy moje wywołanie zwrotne aplikacji działa, przed wywołaniem drugiej aplikacji?Czy moja aplikacja zareaguje na schemat adresu URL?
7
A
Odpowiedz
12
To jest mój obecny rozwiązanie:
- (BOOL) respondsToUrl:url
{
BOOL schemeIsInPlist = NO; // find out if the sceme is in the plist file.
NSBundle* mainBundle = [NSBundle mainBundle];
NSArray* cfBundleURLTypes = [mainBundle objectForInfoDictionaryKey:@"CFBundleURLTypes"];
if ([cfBundleURLTypes isKindOfClass:[NSArray class]] && [cfBundleURLTypes lastObject]) {
NSDictionary* cfBundleURLTypes0 = [cfBundleURLTypes objectAtIndex:0];
if ([cfBundleURLTypes0 isKindOfClass:[NSDictionary class]]) {
NSArray* cfBundleURLSchemes = [cfBundleURLTypes0 objectForKey:@"CFBundleURLSchemes"];
if ([cfBundleURLSchemes isKindOfClass:[NSArray class]]) {
for (NSString* scheme in cfBundleURLSchemes) {
if ([scheme isKindOfClass:[NSString class]] && [url hasPrefix:scheme]) {
schemeIsInPlist = YES;
break;
}
}
}
}
}
BOOL canOpenUrl = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString: url]];
return schemeIsInPlist && canOpenUrl;
}
Ograniczeniem jest to, że są sprawdzając, ta aplikacja zarejestrowany do programu i niektóre aplikacja reaguje na tego adresu URL.
AFAIK nie gwarantuje, że twoja aplikacja jest rzeczywistym odpowiednikiem tego programu (w przypadku, gdy inna aplikacja również zarejestrowała się dla tego programu).
Wygląda na to, że iOS otwiera pierwszą zainstalowaną aplikację dla każdego unikalnego schematu URL.
0
Oto jak rozwiązać go w Swift:
var plistPath = NSBundle.mainBundle().pathForResource("Info", ofType: "plist")
var urlStuff = NSMutableDictionary(contentsOfFile: plistPath!)
var urlType = NSDictionary(objectsAndKeys: "com.appprefix.AppName", "CFBundleURLName", NSArray(object: "fb123456789"), "CFBundleURLSchemes")
urlStuff?.setObject(NSArray(object: urlType), forKey: "CFBundleURLTypes")
urlStuff?.writeToFile(plistPath!, atomically: true)
0
Prostsze rozwiązanie:
+ (BOOL)isBundleURL:(NSURL *)url
{
NSArray *urlTypes = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleURLTypes"];
NSArray *urlSchemes = [urlTypes.firstObject objectForKey:@"CFBundleURLSchemes"];
return [urlSchemes containsObject:url.scheme];
}
+ (BOOL)respondsToURL:(NSURL *)url
{
return [self isBundleURL:url] && [[UIApplication sharedApplication] canOpenURL:url];
}
Powiązane problemy
- 1. Schemat adresu URL dla Linkedin
- 2. Niestandardowy schemat adresu URL bez potwierdzenia (Swift)
- 3. Schemat adresu URL "Ustawienia otwarte" ios
- 4. Schemat adresu URL dla połączenia telefonicznego
- 5. Schemat niestandardowego adresu URL na Instagramie dla Androida
- 6. Schemat adresu URL programu WhatsApp dla aplikacji iPhone'a
- 7. Konwersja adresu URL blobu na zwykły URL
- 8. Jak sprawdzić niestandardowy schemat adresu URL w telefonie iPhone?
- 9. Jak przekazać datę za pośrednictwem adresu URL, aby moja aplikacja odczytała w MVC?
- 10. Schemat adresu URL emulatora iPhone'a dla połączenia telefonicznego
- 11. Aplikacja przekaźnika: jak introspekować schemat na serwerze?
- 12. Jak wykryć, czy moja aplikacja jest piaskownica?
- 13. Sprawdź, czy moja aplikacja IOS jest zaktualizowana
- 14. Moja aplikacja znacznie wolniej na Androida 4.0
- 15. Wicket: Względem bezwzględnego adresu URL lub adresu URL bazy
- 16. Python furl library - Czy istnieje sposób na dodanie parametru do adresu URL bez kodowania adresu URL?
- 17. Jak skonfigurować schemat uwierzytelniania Grails/Spring na adres URL?
- 18. Howto "sandbox" moja aplikacja Lion?
- 19. Sposób na wykrycie adresu URL przekierowania
- 20. Obsługa adresu URL RESTful URL
- 21. Parametry adresu URL GWT
- 22. Czy ścieżka adresu URL "/ #!" specjalny lub exploit?
- 23. moja aplikacja nie otwartym ServletContext zasobu
- 24. Czy identyfikator fragmentu adresu URL jest wysyłany na serwer?
- 25. W jaki sposób moja aplikacja Flash może określić własny adres URL?
- 26. Czy w JavaScript istnieje klasa adresu URL?
- 27. iOS 6 Niestandardowy schemat URL Uruchom obrazy źle
- 28. Dlaczego potrzebujesz ukośnika na końcu adresu URL?
- 29. Czy moja aplikacja zostanie odrzucona, jeśli ikona ma zaokrąglone rogi?
- 30. Czy moja aplikacja korzysta z szyfrowania (tylko keychain)?
Ach, teraz rozumiem trochę lepiej. Przed otwarciem adresu URL nie można się dowiedzieć, co się stanie, gdy otworzysz ten adres URL. Na zapytania iOS nie ma interfejsu LaunchServices. –
Postanowiłem zaakceptować moją odpowiedź, ponieważ wydaje się, że jest to najlepsza dostępna metoda (chociaż nie jest w 100% niezawodna). –