esquema url personalizado de iOS

Estoy creando una aplicación que utiliza un esquema de url personalizado, lo tengo todo configurado y funciona al abrir la aplicación, sin embargo, ahora quiero poder agregar una sola cadena a la url para que la persona que abre la aplicación puede ver esa cadena. Estoy luchando con esto, ¿alguien me puede ayudar por favor?

Aquí está mi código

- (NSDictionary*)parseURLParams:(NSString *)query { NSArray *pairs = [query componentsSeparatedByString:@"&"]; NSMutableDictionary *params = [[NSMutableDictionary alloc] init]; for (NSString *pair in pairs) { NSArray *kv = [pair componentsSeparatedByString:@"="]; NSString *val = [[kv objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; [params setObject:val forKey:[kv objectAtIndex:0]]; } return params; } - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { NSString *title = [alertView buttonTitleAtIndex:buttonIndex]; if([title isEqualToString:@"Send Challenge"]) { [FBWebDialogs presentRequestsDialogModallyWithSession:nil message:[NSString stringWithFormat:@"I just sconetworking %i points on this great game, called SumsUp. can you beat it?!", gameScore] title:nil parameters:nil handler:^(FBWebDialogResult result, NSURL *resultURL, NSError *error) { if (error) { // Error launching the dialog or sending the request. NSLog(@"Error sending request."); } else { if (result == FBWebDialogResultDialogNotCompleted) { // User clicked the "x" icon NSLog(@"User canceled request."); } else { // Handle the send request callback NSDictionary *urlParams = [self parseURLParams:[resultURL query]]; if (![urlParams valueForKey:@"request"]) { // User clicked the Cancel button NSLog(@"User canceled request."); } else { // User clicked the Send button NSString *requestID = [urlParams valueForKey:@"request"]; NSLog(@"Request ID: %@", requestID); } } } }]; } 

Tengo la configuration personalizada de url en la P-List.

en el delegado de mi aplicación, tengo:

 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { UIAlertView *alertView; NSString *text = [NSString stringWithFormat: @"url recieved: %@", url]; alertView = [[UIAlertView alloc] initWithTitle:@"" message:text delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alertView show]; return [FBAppCall handleOpenURL:url sourceApplication:sourceApplication withSession:[PFFacebookUtils session]]; } 

Espero que esto tenga sentido y que alguien pueda ayudarme. Si necesita más información, hágamelo saber.

Gracias Graham

Tuve un problema con el esquema de URL personalizado en ios v. 9.xx cuando intenté abrir la URL de YouTube por aplicación. Encontré un hecho interesante cuando navegué por la networking.

iOS 9 requiere que su aplicación registre previamente los esquemas de aplicación que pretende llamar.

  • Abra su file YourApp-Info.plist y agregue la key, LSApplicationQueriesSchemes .
  • Enumere el artículo en LSApplicationQueriesSchemes , agregue un nuevo elemento con el valor de YouTube (en mi caso).
 <key>LSApplicationQueriesSchemes</key> <array> <string>youtube</string> </array> 

Mi solución es más simple. Espero que lo encuentres util.

 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { // Example URL: myapp://myapp.com/showString/yourString BOOL isMyAppURL = [[url scheme] isEqualToString:@"myapp"]; if (isMyAppURL) { NSArray* pathComponents = [url pathComponents]; NSString *command = pathComponents[0]; // Check for showString command. if ([command isEqualToString:@"showString"]) { NSString *stringToShow = [pathComponents[1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSLog(@"String to show: %@", stringToShow); } } return isMyAppURL; } 

Esto debería apuntarte a la dirección correcta.