اتّبِع هذا الدليل لتخطيط مسار داخل تطبيقك إلى وجهة واحدة باستخدام حزمة تطوير البرامج (SDK) لنظام التشغيل iOS.
نظرة عامة
- أدخِل حزمة تطوير البرامج (SDK) لنظام "التنقّل" في تطبيقك كما هو موضّح في القسم إعداد مشروعك.
- اضبط
GMSMapView
. - اطلب من المستخدم قبول الأحكام والشروط وتفويض خدمات تحديد الموقع الجغرافي والحصول على الإشعارات في الخلفية.
- أنشئ صفيفًا يحتوي على وجهة واحدة أو أكثر.
حدِّد
GMSNavigator
للتحكّم في التنقّل باتجاهات مفصّلة.- أضِف وجهات باستخدام
setDestinations
. - اضبط
isGuidanceActive
علىtrue
لبدء التنقّل. - استخدِم
simulateLocationsAlongExistingRoute
لمحاكاة تقدّم المركبة على طول المسار، ولإجراء اختبارات تطبيقك، وتصحيح الأخطاء، وعرض التطبيق.
- أضِف وجهات باستخدام
الاطّلاع على الرمز
طلب الإذن من المستخدم
قبل استخدام حزمة تطوير البرامج Navigation SDK، على المستخدم الموافقة على الأحكام والشروط وتفويض استخدام خدمات الموقع الجغرافي، وهو أمر مطلوب للتنقّل. إذا كان تطبيقك سيتم تشغيله في الخلفية، يجب أن يطلب أيضًا من المستخدم تفويض إشعارات التنبيهات الإرشادية. يوضّح هذا القسم كيفية عرض طلبات التفويض المطلوبة.
تفويض خدمات الموقع الجغرافي
يستخدم حِزمة تطوير البرامج Navigation SDK خدمات الموقع الجغرافي، ما يتطلّب تفويض المستخدم. لتفعيل خدمات الموقع الجغرافي وعرض مربّع حوار التفويض، اتّبِع الخطوات التالية:
- أضِف مفتاح
NSLocationAlwaysUsageDescription
إلىInfo.plist
. بالنسبة إلى القيمة، أضِف شرحًا موجزًا لسبب احتياج تطبيقك إلى خدمات تحديد الموقع الجغرافي. على سبيل المثال: "يحتاج هذا التطبيق إلى إذن لاستخدام خدمات الموقع الجغرافي من أجل التنقّل من خلال التوجيهات."
لعرض مربّع حوار التفويض، اتصل بـ
requestAlwaysAuthorization()
من مثيل "مدير الموقع الجغرافي".
Swift
self.locationManager.requestAlwaysAuthorization()
Objective-C
[_locationManager requestAlwaysAuthorization];
تفويض إشعارات التنبيهات للحصول على إرشادات في الخلفية
يحتاج حِزم تطوير البرامج 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");
}
}];
الموافقة على الأحكام والشروط
استخدِم الرمز البرمجي التالي لعرض مربّع حوار الأحكام والشروط وتفعيل التنقّل عندما يقبل المستخدم الأحكام. يُرجى العِلم أنّ هذا المثال يتضمّن رمز خدمات الموقع الجغرافي وإشعارات التنبيهات الإرشادية (المعروضة سابقًا).
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
باستخدام GMSNavigationWaypoint
.
النص العائم
يمكنك إضافة نص عائم في أي مكان في تطبيقك، شرط ألا يتم حجب مصدر Google. لا تتيح حزمة تطوير البرامج Navigation SDK تثبيت النص على خط عرض/خط طول على الخريطة أو على تصنيف. لمزيد من المعلومات، اطّلِع على نوافذ المعلومات.