【问题标题】:Cant open google maps from my native ios app with url "comgooglemaps-x-callback://"无法使用网址“comgooglemaps-x-callback://”从我的本机 ios 应用程序打开谷歌地图
【发布时间】:2019-02-08 08:17:40
【问题描述】:

在我的应用程序中,我想使用谷歌地图进行导航。所以我使用谷歌 URL 方案来实现相同的目标。导航完成后,我需要恢复我的应用程序,因此我使用了“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 方案。 请检查我是否正确输入了 Google URL 方案。当我在谷歌文档中检查这个时,他们说“comgooglemaps-x-callback://”的参数与“comgooglemaps”的参数相同,需要两个额外的参数

[NSURL URLWithString:string]

上面的代码总是给出空值,并不指向谷歌地图。

仅当我使用 ("comgooglemaps-x-callback://") 回调 URL 时才会出现此问题。 当我使用没有回调选项的谷歌 URL 时,我可以启动谷歌地图。但就我而言,我想使用回调选项,以便将用户引导回源应用程序。

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

    您只能使用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>
    

    【讨论】:

    • 是的,我可以用这种方法启动谷歌地图,但我想在导航成功后回到我自己的应用程序。默认情况下,iOS 在左上角提供了一个需要用户交互的小后退箭头。谷歌文档中建议使用“comgooglemaps-x-callback://”。不幸的是,我无法让它工作。有没有其他方法可以解决这个问题?
    【解决方案2】:

    查看下面的 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 的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-16
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      相关资源
      最近更新 更多