Не могу открыть Google Maps из моего родного приложения IOS с URL "Comgooglemaps-X-CallBack: //" - PullRequest
0 голосов
/ 08 февраля 2019

В моем приложении я хотел бы использовать карты Google для целей навигации.Поэтому я использовал схему URL Google для достижения того же.После завершения навигации мне нужно возобновить работу приложения, поэтому я использовал опцию «comgooglemaps-x-callback: //».Я использую следующие коды

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"comgooglemaps-x-callback://"]])
    {
        NSString* appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"];
        NSString *string = [NSString stringWithFormat:@"comgooglemaps-x-callback://?saddr=%f,%f&daddr=%f,%f&directionsmode=driving&x-success=myapp://?resume=true&x-source=%@",sourceCoords.latitude,sourceCoords.longitude, destCoords.latitude, destCoords.longitude,appName];
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:string] options:@{} completionHandler:^(BOOL success)
         {
             if (success)
             {
                 NSLog(@"Opened");
                 ApplicationDelegate.isDirectedToGoogleMaps = YES;
             }
         }];
    }

Здесь «myapp» - это схема URL моего приложения.Проверьте, правильно ли я ввел схему URL Google.Когда я зарегистрировался в документации Google по этому поводу, они сказали, что параметры для "comgooglemaps-x-callback: //" такие же, как и для "comgooglemaps", ожидают два дополнительных параметра

[NSURL URLWithString:string]

Приведенный выше код всегдадает нулевое значение и не направляется на карты Google.

Проблема возникает только при использовании URL-адреса обратного вызова ("comgooglemaps-x-callback: //").Когда я использую Google URL без параметров обратного вызова, я могу запускать карты Google.Но в моем случае я хочу использовать опцию обратного вызова, чтобы я мог перенаправить пользователей обратно в исходное приложение.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Проверьте ниже код для Swift 4.2

            if (UIApplication.shared.canOpenURL(URL(string:"comgooglemaps://")!)) {
                address = address.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)!
                UIApplication.shared.open(URL(string:"comgooglemaps://?saddr=\(lat),\(log)&daddr=\(address)")!, options: [:], completionHandler: nil)
            } else {
                print("Can't use comgooglemaps://");
                let coordinate = CLLocationCoordinate2DMake(Double(lat) ?? 0.0,Double(log) ?? 0.0)
                let mapItem = MKMapItem(placemark: MKPlacemark(coordinate: coordinate, addressDictionary:nil))
                mapItem.name = address
                mapItem.openInMaps(launchOptions: [MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving])
            }

Для получения разрешения и других изменений вы можете проверить ответы @Mahendra GP.

0 голосов
/ 08 февраля 2019

Вы можете открыть карты Google, используя только comgooglemaps://.

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"comgooglemaps://"]]) {

        NSString* url = [NSString stringWithFormat: @"comgooglemaps://?daddr=%@&directionsmode=driving", encodedString];

        [[UIApplication sharedApplication] openURL:[NSURL URLWithString: url] options:@{} completionHandler:^(BOOL success) {
            if (success) {
                //do something on success
            }
        }];

    } else {
     //if google map is not installed in device then we can open goole map in web
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://maps.google.com/maps?daddr=%@", encodedString]] options:@{} completionHandler:^(BOOL success) {
            if (success) {
               //do something on success
            }
        }];
    }

Не забудьте включить в Info.plist, как показано ниже.

<key>LSApplicationQueriesSchemes</key>
<array>

    <string>comgooglemaps</string>

</array>

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...