ไปยังส่วนต่างๆ

ทำตามคู่มือนี้เพื่อวางแผนเส้นทางภายในแอปไปยังจุดหมายเดียวโดยใช้ Navigation SDK สำหรับ iOS

ภาพรวม

  1. ผสานรวม Navigation SDK เข้ากับแอปตามที่อธิบายไว้ในส่วนตั้งค่าโปรเจ็กต์
  2. กำหนดค่า GMSMapView
  3. แจ้งให้ผู้ใช้ยอมรับข้อกำหนดและเงื่อนไข รวมถึงให้สิทธิ์บริการตำแหน่งและการแจ้งเตือนในเบื้องหลัง
  4. สร้างอาร์เรย์ที่มีปลายทางอย่างน้อย 1 รายการ
  5. กำหนด GMSNavigator เพื่อควบคุมการนำทางแบบเลี้ยวต่อเลี้ยว

    • เพิ่มปลายทางโดยใช้ setDestinations
    • ตั้งค่า isGuidanceActive เป็น true เพื่อเริ่มการนำทาง
    • ใช้ simulateLocationsAlongExistingRoute เพื่อจำลองความคืบหน้าของยานพาหนะตามเส้นทางสำหรับการทดสอบ การแก้ไขข้อบกพร่อง และการสาธิตแอป

ดูโค้ด

แจ้งให้ผู้ใช้ให้สิทธิ์ที่จำเป็น

ก่อนใช้ Navigation SDK ผู้ใช้ต้องยอมรับข้อกำหนดและเงื่อนไข และให้สิทธิ์การใช้บริการตำแหน่ง ซึ่งจำเป็นสำหรับการนำทาง หากแอปจะทำงานในเบื้องหลัง แอปจะต้องแจ้งให้ผู้ใช้ให้สิทธิ์การแจ้งเตือนคำแนะนำด้วย ส่วนนี้จะแสดงวิธีแสดงข้อความแจ้งการให้สิทธิ์ที่จำเป็น

ให้สิทธิ์เข้าถึงบริการตำแหน่ง

Navigation SDK ใช้บริการตำแหน่ง ซึ่งต้องได้รับสิทธิ์จากผู้ใช้ หากต้องการเปิดใช้บริการตำแหน่งและแสดงกล่องโต้ตอบการให้สิทธิ์ ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิดใช้ความสามารถด้านตำแหน่งและเบื้องหลังใน Xcode โดยทำดังนี้

    1. เปิดเป้าหมายใน Xcode แล้วเลือกแท็บ Signing & Capabilities โปรดดูรายละเอียดในคู่มือของ Apple เกี่ยวกับการเพิ่มความสามารถให้กับแอป
    2. เพิ่มความสามารถตำแหน่ง (ตลอดเวลา) และตำแหน่ง (เมื่อใช้งาน) ในช่องข้อความของแต่ละรายการ ให้เพิ่มคำอธิบายสั้นๆ ว่าทำไมแอปจึงต้องใช้บริการตำแหน่ง (เช่น "แอปนี้ต้องได้รับสิทธิ์ใช้บริการตำแหน่งสำหรับการนำทางแบบเลี้ยวต่อเลี้ยว")
    3. เพิ่มความสามารถโหมดเบื้องหลัง แล้วเลือกช่องทำเครื่องหมายการอัปเดตตำแหน่ง หากไม่มีความสามารถนี้ แอปจะขัดข้องเมื่อเริ่มการนำทาง โปรดดูรายละเอียดในคู่มือของ Apple เกี่ยวกับการจัดการการอัปเดตตำแหน่งในเบื้องหลัง
  2. หากต้องการแสดงกล่องโต้ตอบการให้สิทธิ์ ให้เรียกใช้เมธอด requestAlwaysAuthorization() ของอินสแตนซ์ตัวจัดการตำแหน่ง

Swift

self.locationManager.requestAlwaysAuthorization()

Objective-C

[_locationManager requestAlwaysAuthorization];

ดูเอกสารประกอบฉบับเต็มของ Apple เกี่ยวกับการให้สิทธิ์บริการตำแหน่ง

ให้สิทธิ์การแจ้งเตือนเพื่อรับคำแนะนำในเบื้องหลัง

Navigation SDK ต้องได้รับสิทธิ์จากผู้ใช้เพื่อแสดงการแจ้งเตือนเมื่อแอปทำงานอยู่เบื้องหลัง เพิ่มโค้ดต่อไปนี้เพื่อแจ้งให้ผู้ใช้ขอสิทธิ์แสดงการแจ้งเตือนเหล่านี้

Swift

UNUserNotificationCenter.current().requestAuthorization(options: [.alert]) {
  granted, error in
    // Handle denied authorization to display notifications.
    if !granted || error != nil {
      print("User rejected request to display notifications.")
    }
}

Objective-C

// Request authorization for alert notifications.
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
UNAuthorizationOptions options = UNAuthorizationOptionAlert;
[center requestAuthorizationWithOptions:options
                      completionHandler:
 ^(
   BOOL granted,
   NSError *_Nullable error) {
     if (!error && granted) {
       NSLog(@"iOS Notification Permission: newly Granted");
     } else {
       NSLog(@"iOS Notification Permission: Failed or Denied");
     }
   }];

ให้สิทธิ์เซ็นเซอร์ตรวจจับการเคลื่อนไหว

ในรุ่นหลักในอนาคต Navigation SDK สำหรับ iOS จะรวมข้อมูลตำแหน่งหลักเข้ากับเซ็นเซอร์ตรวจจับการเคลื่อนไหวของอุปกรณ์ (CMAltimeter) เพื่อคำนวณระดับความสูงของเส้นทาง เมื่อ SDK เข้าถึงมาตรวัดความสูง iOS จะใช้สตริงนี้โดยอัตโนมัติเพื่อแจ้งให้ผู้ใช้ให้สิทธิ์

การเพิ่มคีย์นี้ตอนนี้จะไม่ส่งผลต่อลักษณะการทำงานปัจจุบัน แต่จะป้องกันไม่ให้เกิดข้อขัดข้องในการเริ่มต้นเมื่อคุณอัปเกรด SDK ในภายหลัง

หากต้องการเตรียมพร้อมสำหรับการอัปเกรด SDK ในอนาคต ให้กำหนดค่าการให้สิทธิ์เซ็นเซอร์ตรวจจับการเคลื่อนไหวดังนี้

  1. เปิดเป้าหมายใน Xcode แล้วไปที่แท็บ Info หรือเปิดไฟล์ Info.plist

  2. เพิ่มคีย์ใหม่: Privacy - Motion Usage Description (NSMotionUsageDescription)

  3. เพิ่มคำอธิบายสั้นๆ สำหรับผู้ใช้ เช่น "แอปนี้ต้องเข้าถึงเซ็นเซอร์ตรวจจับการเคลื่อนไหวเพื่อคำนวณระดับความสูงและปรับปรุงความแม่นยำในการกำหนดเส้นทางแผนที่"

ยอมรับข้อกำหนดและเงื่อนไข

ใช้โค้ดต่อไปนี้เพื่อแสดงกล่องโต้ตอบข้อกำหนดและเงื่อนไข และเปิดใช้การนำทางเมื่อผู้ใช้ยอมรับข้อกำหนด โปรดทราบว่าตัวอย่างนี้มีโค้ดสำหรับบริการตามตำแหน่งและการแจ้งเตือนคำแนะนำ (แสดงไว้ก่อนหน้านี้)

Swift

  let termsAndConditionsOptions = GMSNavigationTermsAndConditionsOptions(companyName: "Ride Sharing Co.")

  GMSNavigationServices.showTermsAndConditionsDialogIfNeeded(
    with: termsAndConditionsOptions) { termsAccepted in
    if termsAccepted {
      // Enable navigation if the user accepts the terms.
      self.mapView.isNavigationEnabled = true
      self.mapView.settings.compassButton = true

      // Request authorization to use location services.
      self.locationManager.requestAlwaysAuthorization()

      // Request authorization for alert notifications which deliver guidance instructions
      // in the background.
    UNUserNotificationCenter.current().requestAuthorization(options: [.alert]) {
      granted, error in
        // Handle rejection of notification authorization.
        if !granted || error != nil {
          print("Authorization to deliver notifications was rejected.")
        }
      }
    } else {
      // Handle rejection of terms and conditions.
    }
  }

Objective-C

GMSNavigationTermsAndConditionsOptions *termsAndConditionsOptions = [[GMSNavigationTermsAndConditionsOptions alloc] initWithCompanyName:@"Ride Sharing Co."];

[GMSNavigationServices
  showTermsAndConditionsDialogIfNeededWithOptions:termsAndConditionsOptions
  callback:^(BOOL termsAccepted) {
   if (termsAccepted) {
     // Enable navigation if the user accepts the terms.
     _mapView.navigationEnabled = YES;
     _mapView.settings.compassButton = YES;

     // Request authorization to use the current device location.
     [_locationManager requestAlwaysAuthorization];

     // Request authorization for alert notifications which deliver guidance instructions
     // in the background.
     UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
     UNAuthorizationOptions options = UNAuthorizationOptionAlert;
     [center requestAuthorizationWithOptions:options
                           completionHandler:
     ^(
       BOOL granted,
       NSError *_Nullable error) {
         if (!error && granted) {
           NSLog(@"iOS Notification Permission: newly Granted");
         } else {
           NSLog(@"iOS Notification Permission: Failed or Denied");
         }
       }];
   } else {
     // Handle rejection of the terms and conditions.
   }
 }];

สร้างเส้นทางและเริ่มการแนะนำ

หากต้องการวางแผนเส้นทาง ให้เรียกใช้เมธอด setDestinations ของเครื่องนำทางด้วยอาร์เรย์ของจุดหมาย GMSNavigationWaypoint อย่างน้อย 1 แห่งที่จะไป หากคำนวณเส้นทางสำเร็จ เส้นทางจะปรากฏบนแผนที่ หากต้องการเริ่มคำแนะนำตามเส้นทาง ให้ตั้งค่า isGuidanceActive เป็น true ใน Callback

ตัวอย่างต่อไปนี้แสดงข้อมูลต่อไปนี้

  • กำลังสร้างเส้นทางใหม่ที่มีจุดหมายเดียว
  • กำลังเริ่มการนำทาง
  • กำลังเปิดใช้การแจ้งเตือนคำแนะนำในเบื้องหลัง
  • จำลองการเดินทางตามเส้นทาง (ไม่บังคับ)
  • การตั้งค่าโหมดกล้องเป็น "ติดตาม" (ไม่บังคับ)

Swift

func startNav() {
  var destinations = [GMSNavigationWaypoint]()
  destinations.append(GMSNavigationWaypoint.init(placeID: "ChIJnUYTpNASkFQR_gSty5kyoUk",
                                                 title: "PCC Natural Market")!)

  mapView.navigator?.setDestinations(destinations) { routeStatus in
    self.mapView.navigator?.isGuidanceActive = true
    self.mapView.locationSimulator?.simulateLocationsAlongExistingRoute()
    self.mapView.cameraMode = .following
  }
}

Objective-C

- (void)startNav {
  NSArray<GMSNavigationWaypoint *> *destinations =
  @[[[GMSNavigationWaypoint alloc] initWithPlaceID:@"ChIJnUYTpNASkFQR_gSty5kyoUk"
                                             title:@"PCC Natural Market"]];

  [_mapView.navigator setDestinations:destinations
                             callback:^(GMSRouteStatus routeStatus){
                               [_mapView.locationSimulator simulateLocationsAlongExistingRoute];
                               _mapView.navigator.guidanceActive = YES;
                               _mapView.cameraMode = GMSNavigationCameraModeFollowing;
                             }];
}

ดูข้อมูลเกี่ยวกับรหัสสถานที่ได้ที่รหัสสถานที่

สถานการณ์ที่มีจุดแวะพักหลายจุด

คุณกำหนดค่าจุดอ้างอิงได้สูงสุด 25 จุด

วิธีการเดินทาง setDestinations ไม่รองรับการเดินทางที่มีจุดแวะพักหลายแห่ง ใช้ continueToNextDestinationWithCompletion() เพื่อเลื่อนจุดอ้างอิงไปยังช่วงถัดไปของการเดินทาง

ตั้งค่าโหมดการเดินทาง

โหมดการเดินทางจะกำหนดทั้งประเภทของเส้นทางที่จะดึงข้อมูลและวิธีกำหนดเส้นทางของผู้ใช้ คุณสามารถตั้งค่าโหมดการเดินทางได้ 1 ใน 4 โหมดสำหรับเส้นทาง ได้แก่ การขับรถ การปั่นจักรยาน การเดิน และแท็กซี่ ในโหมดการขับขี่และแท็กซี่ เส้นทางของผู้ใช้จะอิงตามทิศทางการเดินทาง ในโหมดการปั่นจักรยานและการเดิน เส้นทางจะแสดงตามทิศทางที่อุปกรณ์หันไป (ด้านบนของอุปกรณ์ในโหมดแนวนอน)

ตั้งค่าพร็อพเพอร์ตี้ travelMode ของมุมมองแผนที่ ดังที่แสดงในตัวอย่างต่อไปนี้

Swift

self.mapView.travelMode = .cycling

Objective-C

_mapView.travelMode = GMSNavigationTravelModeCycling;

ตั้งค่าถนนที่ต้องการเลี่ยง

ใช้พร็อพเพอร์ตี้ avoidsHighways และ avoidsTolls BOOL เพื่อหลีกเลี่ยงทางหลวง ทางพิเศษ หรือทั้ง 2 อย่างตลอดเส้นทาง

Swift

self.mapView.navigator?.avoidsTolls = true

Objective-C

_mapView.navigator.avoidsTolls = YES;

ตั้งระดับเสียงของการนำทางด้วยเสียง

หากต้องการปรับระดับเสียงของการนำทางด้วยเสียง ให้ตั้งค่าพร็อพเพอร์ตี้ volumeLevel ในเครื่องมือนำทางเป็นต่ำ ปกติ หรือสูง Navigator จะใช้ระดับเสียงที่คงอยู่ล่าสุด หรือค่าเริ่มต้นเป็นปกติ

Swift

self.mapView.navigator?.volumeLevel = .low

Objective-C

_mapView.navigator.volumeLevel = GMSNavigationVolumeLevelLow;

เครื่องมือค้นหา PlaceID

คุณสามารถใช้เครื่องมือค้นหารหัสสถานที่เพื่อค้นหารหัสสถานที่ที่จะใช้เป็นจุดหมายของเส้นทางได้ เพิ่มจุดหมายจากplaceIDด้วย GMSNavigationWaypoint

ข้อความแบบลอย

คุณสามารถเพิ่มข้อความลอยได้ทุกที่ในแอป ตราบใดที่ไม่ได้บดบังการระบุแหล่งที่มาของ Google Navigation SDK ไม่รองรับการตรึงข้อความกับพิกัดที่เฉพาะเจาะจง (ละติจูด ลองจิจูด) บนแผนที่หรือกับป้ายกำกับ ดูข้อมูลเพิ่มเติมได้ที่หน้าต่างข้อมูล