اتّبِع هذا الدليل لرسم مسار داخل تطبيقك إلى وجهة واحدة باستخدام حزمة Navigation SDK لنظام التشغيل iOS.
نظرة عامة
- يمكنك دمج حزمة تطوير البرامج Navigation SDK في تطبيقك، كما هو موضّح في قسم إعداد مشروعك.
- ضبط
GMSMapView
- اطلب من المستخدم قبول الأحكام والشروط والسماح بخدمات الموقع الجغرافي والإشعارات في الخلفية.
- أنشئ مصفوفة تحتوي على وجهة واحدة أو أكثر.
حدِّد
GMSNavigator
للتحكّم في ميزة "التنقّل باتّجاهات مفصّلة".- أضِف وجهات باستخدام
setDestinations
. - اضبط
isGuidanceActive
علىtrue
لبدء التنقّل. - استخدِم
simulateLocationsAlongExistingRoute
لمحاكاة تقدّم المركبة على طول المسار، وذلك لأغراض الاختبار وتصحيح الأخطاء وتوضيح طريقة عمل تطبيقك.
- أضِف وجهات باستخدام
الاطّلاع على الرمز
مطالبة المستخدم بالحصول على الأذونات اللازمة
قبل استخدام Navigation SDK، يجب أن يوافق المستخدم على الأحكام والشروط، وأن يمنح الإذن باستخدام خدمات الموقع الجغرافي، وهو أمر ضروري للتنقّل. إذا كان تطبيقك سيعمل في الخلفية، يجب أيضًا أن يطلب من المستخدم الإذن بتلقّي إشعارات تنبيهات الإرشاد. يوضّح هذا القسم كيفية عرض طلبات الحصول على الأذونات المطلوبة.
تفويض خدمات الموقع الجغرافي
تستخدم حزمة تطوير البرامج (SDK) الخاصة بخدمة "التنقّل" خدمات الموقع الجغرافي، ما يتطلّب الحصول على إذن المستخدم. لتفعيل خدمات الموقع الجغرافي وعرض مربّع حوار طلب الإذن، اتّبِع الخطوات التالية:
- أضِف المفتاح
NSLocationAlwaysUsageDescription
إلىInfo.plist
. بالنسبة إلى القيمة، أضِف شرحًا موجزًا لسبب احتياج تطبيقك إلى خدمات الموقع الجغرافي. على سبيل المثال: "يحتاج هذا التطبيق إلى إذن لاستخدام خدمات الموقع الجغرافي من أجل توفير ميزة التنقّل خطوة بخطوة".
لعرض مربّع حوار التفويض، استدعِ الدالة
requestAlwaysAuthorization()
الخاصة بنسخة "مدير الموقع الجغرافي".
Swift
self.locationManager.requestAlwaysAuthorization()
Objective-C
[_locationManager requestAlwaysAuthorization];
منح الإذن بتلقّي إشعارات التنبيهات للحصول على إرشادات في الخلفية
تحتاج حزمة تطوير البرامج (SDK) الخاصة بخدمة Navigation إلى إذن المستخدم لتقديم إشعارات التنبيهات عندما يكون التطبيق يعمل في الخلفية. أضِف الرمز التالي لطلب إذن المستخدم بعرض هذه الإشعارات:
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");
}
}];
قبول الأحكام والشروط
استخدِم الرمز التالي لعرض مربّع حوار الأحكام والشروط، ولتفعيل التنقّل عندما يوافق المستخدم على الأحكام. يُرجى العِلم أنّ هذا المثال يتضمّن الرمز الخاص بخدمات الموقع الجغرافي وإشعارات تنبيهات الإرشادات (الموضّحة سابقًا).
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()
الخاصة بـ Navigator مع مصفوفة تحتوي على وجهة واحدة أو أكثر (GMSNavigationWaypoint
) يجب زيارتها. إذا تم احتساب المسار بنجاح، سيظهر على الخريطة. لبدء الإرشاد على طول المسار،
بدءًا من الوجهة الأولى، اضبط قيمة isGuidanceActive
على true
في
دالة معاودة الاتصال.
يوضّح المثال التالي:
- إنشاء مسار جديد يتضمّن وجهتَين
- جارٍ بدء التوجيه.
- تفعيل إشعارات الإرشاد في الخلفية
- محاكاة السفر على طول المسار (اختياري)
- ضبط وضع الكاميرا على "تتبُّع" (اختياري)
Swift
func startNav() {
var destinations = [GMSNavigationWaypoint]()
destinations.append(GMSNavigationWaypoint.init(placeID: "ChIJnUYTpNASkFQR_gSty5kyoUk",
title: "PCC Natural Market")!)
destinations.append(GMSNavigationWaypoint.init(placeID:"ChIJJ326ROcSkFQRBfUzOL2DSbo",
title:"Marina Park")!)
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"],
[[GMSNavigationWaypoint alloc] initWithPlaceID:@"ChIJJ326ROcSkFQRBfUzOL2DSbo"
title:@"Marina Park"]];
[_mapView.navigator setDestinations:destinations
callback:^(GMSRouteStatus routeStatus){
[_mapView.locationSimulator simulateLocationsAlongExistingRoute];
_mapView.navigator.guidanceActive = YES;
_mapView.cameraMode = GMSNavigationCameraModeFollowing;
}];
}
لمزيد من المعلومات عن معرّفات الأماكن، يُرجى الرجوع إلى معرّفات الأماكن.
تحديد وضع السفر
يحدّد وضع التنقّل نوع المسار الذي سيتم جلبه، والطريقة التي يتم بها تحديد مسار المستخدم. يمكنك ضبط أحد أوضاع السفر الأربعة لمسار ما: القيادة وركوب الدراجات والمشي واستخدام سيارة الأجرة. في وضع القيادة ووضع سيارة الأجرة، يستند المسار إلى اتجاه التنقّل، بينما في وضع ركوب الدراجة ووضع المشي، يتم تمثيل المسار بالاتجاه الذي يشير إليه الجهاز (نحو أعلى الجهاز في الوضع الأفقي).
اضبط السمة travelMode
لطريقة عرض الخريطة، كما هو موضّح في المثال التالي:
Swift
self.mapView.travelMode = .cycling
Objective-C
_mapView.travelMode = GMSNavigationTravelModeCycling;
ضبط الطرق التي يجب تجنُّبها
استخدِم السمتَين avoidsHighways
وavoidsTolls
BOOL
لتجنُّب الطرق السريعة و/أو الطرق التي تتطلّب دفع رسوم عبور على طول المسار.
Swift
self.mapView.navigator?.avoidsTolls = true
Objective-C
_mapView.navigator.avoidsTolls = YES;
أداة البحث عن PlaceID
يمكنك استخدام أداة البحث عن معرّف المكان
للعثور على معرّفات الأماكن التي تريد استخدامها كوجهات في المسار. أضِف وجهة من placeID
باستخدام GMSNavigationWaypoint
.
نص عائم
يمكنك إضافة نص عائم في أي مكان في تطبيقك، طالما أنّ بيان المصدر من Google غير مغطّى. لا يتيح Navigation SDK تثبيت النص على خط عرض/طول على الخريطة أو على تصنيف. لمزيد من المعلومات، يُرجى الاطّلاع على نوافذ المعلومات.