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