Пользовательская схема URL-адресов iOS

Я создаю приложение, которое использует настраиваемую схему URL-адресов, у меня все настроено, и оно работает при открытии приложения, однако теперь я хочу иметь возможность добавить одну строку в URL-адрес, чтобы человек, который открывает приложение может видеть эту строку. Я действительно борюсь с этим, может кто-нибудь помочь мне, пожалуйста?

Вот мой код

- (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 scored %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);
                     }
                 }
             }
         }];
    }

У меня есть пользовательская настройка URL-адреса в P-List.

в моем делегате приложения у меня есть:

- (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]];

}

Я надеюсь, что это имеет смысл, и кто-то может мне помочь. Если требуется дополнительная информация, пожалуйста, дайте мне знать?

Спасибо, Грэм.


person Graham George    schedule 01.03.2014    source источник
comment
Вы не сказали, что он делает неправильно. Показать делегат приложения, вызывающий parseURLParams:   -  person Wain    schedule 01.03.2014
comment
Спасибо, я отредактировал вопрос, чтобы показать вызов делегата приложения. Все это работает и не вызывает никаких проблем, я просто не могу понять, как добавить строку, которую я хочу отправить в URL-адрес.   -  person Graham George    schedule 01.03.2014


Ответы (2)


У меня возникла проблема с настраиваемой схемой URL-адресов на iOS версии 9.x.x. когда я попытался открыть URL-адрес Youtube с помощью приложения. Я обнаружил интересный факт, когда просматривал сеть.

iOS 9 требует, чтобы ваше приложение предварительно зарегистрировало схемы приложений, которые оно намеревается вызывать.

  • Откройте файл YourApp-Info.plist и добавьте ключ LSApplicationQueriesSchemes.
  • Перечислите элемент в разделе LSApplicationQueriesSchemes, добавьте новый элемент со значением youtube (в моем случае).

<key>LSApplicationQueriesSchemes</key>
<array>
  <string>youtube</string>
</array>

person Ihor Pavlyk    schedule 27.10.2015

Мое решение проще. Я надеюсь, что вы найдете это полезным.

- (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;
}

Это должно указать вам правильное направление.

person Rafa de King    schedule 01.03.2014
comment
Спасибо за ответ, только что попробовал. проблема, с которой я сталкиваюсь, заключается в том, что я меняю свой URL-адрес с fb[my_facebook_app_ID] на fb???????????????://myapp.com/showString/yourString (например) в мой p-list, пытаясь открыть приложение по ссылкам на другое приложение, которое у меня есть в магазине приложений! я совсем тупой? - person Graham George; 01.03.2014