Antes de hacer una aplicación que debería devolver mi aplicación (como una aplicación que actúa según la especificación x-callback-url), ¿cómo puedo verificar mediante programación que la devolución de llamada de mi aplicación funciona, antes de llamar a la otra aplicación?¿Mi aplicación responderá a un esquema de url?
7
A
Respuesta
12
Ésta es mi solución actual:
- (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;
}
La limitación es que estamos comprobando que esta aplicación registrado para el esquema y algunos aplicación responde a esa URL.
AFAIK esto no garantiza que su aplicación sea la respuesta real para ese esquema (en el caso donde otra aplicación también se registró para ese esquema).
Por lo que he intentado, parece que iOS abre la primera aplicación instalada para cada esquema de url único.
0
Aquí es cómo lo resolví en 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
Una solución más simple:
+ (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];
}
Cuestiones relacionadas
- 1. ¿Cómo puedo volver a iniciar la aplicación que abrió mi esquema de URL personalizado?
- 2. Esquema de URL: aplicación abierta o Appstore desde el correo
- 3. Esquema de url de WhatsApp para la aplicación de iPhone
- 4. Cuando una aplicación OS X se inicia mediante un esquema de URL registrado, ¿cómo se accede a la URL completa?
- 5. ¿Cómo se puede depurar su aplicación si comenzaron a usar un esquema de URL personalizado?
- 6. ¿El calendario de iOS admite un esquema de URL?
- 7. Esquema de URL: Qt y mac
- 8. interupting enlace a mi aplicación
- 9. ¿Cómo registrar programáticamente un esquema de URL personalizado?
- 10. ¿Cómo registrar una aplicación para responder a una solicitud de apertura personalizada del esquema de URL?
- 11. ¿Cómo inicio mi aplicación a través de una URL personalizada en un correo electrónico
- 12. "fb: //" esquema de URL: ¿oficial o no?
- 13. más de una aplicación tiene el mismo identificador de URL para la aplicación de URL personalizada?
- 14. Esquema predeterminado en Oracle URL de conexión
- 15. Esquema de manifiesto de aplicación
- 16. Gmail como el esquema de URL
- 17. ¿Cómo manejar un esquema de URL personalizado en Webkit GTK?
- 18. ¿Cómo afirmar que una clase responderá a un método de clase con RSpec?
- 19. Obtener mi URL base de la aplicación web en JavaScript
- 20. ¿Cómo agrego un UIWebView a mi aplicación iOS?
- 21. Cómo depurar cuando se inicia una aplicación con esquema de URL de Safari
- 22. Acceso a la solución de navegación TomTom a través del esquema de URL
- 23. Olvidé mi contraseña URL
- 24. Obteniendo un enlace a mi aplicación en play.google antes de publicar mi aplicación
- 25. URL codificada barras diagonales que rompen mi aplicación CodeIgniter
- 26. ¿Cómo ejecutar la aplicación iphone GameCenter desde mi aplicación?
- 27. mover la tabla de un esquema a otro esquema?
- 28. ¿Cómo manejo un esquema de URL personalizado en PhoneGap para un inicio en frío?
- 29. Esquema de codificación de REST URL Spring:% 20 o + ¿Cuál?
- 30. ¿Cómo puede mi aplicación Flash determinar su propia URL?
Ah, ahora entiendo un poco mejor. No hay forma de saber con certeza antes de abrir una URL qué sucederá cuando abra esa URL. No hay interfaz LaunchServices en iOS para consultar. –
Decidí aceptar mi respuesta ya que parece que este es el mejor método disponible (aunque no es 100% confiable). –