البدء
قبل أن تتمكّن من تجربة نموذج الرمز، عليك ضبط بيئة التطوير. لمزيد من المعلومات، يُرجى الاطّلاع على عيّنات الرموز البرمجية لحزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" لنظام التشغيل iOS.
عرض الرمز
Swift
import GoogleMaps import UIKit class MyLocationViewController: UIViewController { private let cameraLatitude: CLLocationDegrees = -33.868 private let cameraLongitude: CLLocationDegrees = 151.2086 private let cameraZoom: Float = 12 lazy var mapView: GMSMapView = { let camera = GMSCameraPosition( latitude: cameraLatitude, longitude: cameraLongitude, zoom: cameraZoom) return GMSMapView(frame: .zero, camera: camera) }() var observation: NSKeyValueObservation? var location: CLLocation? { didSet { guard oldValue == nil, let firstLocation = location else { return } mapView.camera = GMSCameraPosition(target: firstLocation.coordinate, zoom: 14) } } override func viewDidLoad() { super.viewDidLoad() mapView.delegate = self mapView.settings.compassButton = true mapView.settings.myLocationButton = true mapView.isMyLocationEnabled = true view = mapView // Listen to the myLocation property of GMSMapView. observation = mapView.observe(\.myLocation, options: [.new]) { [weak self] mapView, _ in self?.location = mapView.myLocation } } deinit { observation?.invalidate() } } extension MyLocationViewController: GMSMapViewDelegate { func mapView(_ mapView: GMSMapView, didTapMyLocation location: CLLocationCoordinate2D) { let alert = UIAlertController( title: "Location Tapped", message: "Current location: <\(location.latitude), \(location.longitude)>", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: .default)) present(alert, animated: true) } }
Objective-C
#import "GoogleMapsDemos/Samples/MyLocationViewController.h" #import <GoogleMaps/GoogleMaps.h> @implementation MyLocationViewController { GMSMapView *_mapView; BOOL _firstLocationUpdate; } - (void)viewDidLoad { [super viewDidLoad]; GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.868 longitude:151.2086 zoom:12]; _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; _mapView.delegate = self; _mapView.settings.compassButton = YES; _mapView.settings.myLocationButton = YES; // Listen to the myLocation property of GMSMapView. [_mapView addObserver:self forKeyPath:@"myLocation" options:NSKeyValueObservingOptionNew context:NULL]; self.view = _mapView; // Ask for My Location data after the map has already been added to the UI. GMSMapView *mapView = _mapView; dispatch_async(dispatch_get_main_queue(), ^{ mapView.myLocationEnabled = YES; }); } - (void)mapView:(GMSMapView *)mapView didTapMyLocation:(CLLocationCoordinate2D)location { NSString *message = [NSString stringWithFormat:@"My Location Dot Tapped at: [lat: %f, lng: %f]", location.latitude, location.longitude]; UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Location Tapped" message:message preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){ }]; [alertController addAction:okAction]; [self presentViewController:alertController animated:YES completion:nil]; } - (void)dealloc { [_mapView removeObserver:self forKeyPath:@"myLocation" context:NULL]; } #pragma mark - KVO updates - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (!_firstLocationUpdate) { // If the first location update has not yet been received, then jump to that location. _firstLocationUpdate = YES; CLLocation *location = [change objectForKey:NSKeyValueChangeNewKey]; _mapView.camera = [GMSCameraPosition cameraWithTarget:location.coordinate zoom:14]; } } @end
تشغيل نموذج التطبيق الكامل على الجهاز
يتوفّر نموذج تطبيق حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" لنظام التشغيل iOS كملف أرشيف للتنزيل من GitHub. اتّبِع الخطوات التالية لتثبيت تطبيق "نموذج حزمة تطوير البرامج (SDK) لتطبيق "خرائط Google" لنظام التشغيل iOS وتجربته.
- شغِّل
git clone https://github.com/googlemaps-samples/maps-sdk-for-ios-samples.git
لنسخ مستودع العيّنات إلى دليل محلي. افتح نافذة "محطة طرفية"، وانتقِل إلى الدليل الذي نسخت فيه نموذج الملفات، ثم انتقِل إلى دليل GoogleMaps:
Swift
cd maps-sdk-for-ios-samples-main/GoogleMaps-Swift
pod install
open GoogleMapsSwiftDemos.xcworkspace
Objective-C
cd maps-sdk-for-ios-samples-main/GoogleMaps
pod install
open GoogleMapsDemos.xcworkspace
- في Xcode، اضغط على زرّ الترجمة لإنشاء التطبيق باستخدام المخطّط الحالي. يُرسِل عملية الإنشاء خطأً، ويطلب منك إدخال مفتاح واجهة برمجة التطبيقات
في ملف
SDKConstants.swift
لنظام Swift أوSDKDemoAPIKey.h
ملف Objective-C. - إذا لم يكن لديك مفتاح واجهة برمجة تطبيقات بعد، اتّبِع التعليمات لإعداد مشروع على Google Cloud Console والحصول على مفتاح واجهة برمجة تطبيقات. عند ضبط
مفتاح التشفير في Cloud Console، يمكنك
حصر المفتاح بملف تعريف حِزمة
نموذج التطبيق لضمان عدم استخدام المفتاح إلا من خلال تطبيقك. معرّف الحِزمة التلقائي لتطبيق نماذج حِزم تطوير البرامج (SDK) هو
com.example.GoogleMapsDemos
. - عدِّل ملف
SDKConstants.swift
لنظام Swift أو ملفSDKDemoAPIKey.h
لنظام Objective-C والصِق مفتاح واجهة برمجة التطبيقات في تعريف الثابتينapiKey
أوkAPIKey
. على سبيل المثال:Swift
static let apiKey = "YOUR_API_KEY"
Objective-C
static NSString *const kAPIKey = @"YOUR_API_KEY";
- في ملف
SDKConstants.swift
(Swift) أو ملفSDKDemoAPIKey.h
(Objective-C)، أزِل السطر التالي، لأنّه يُستخدَم لتسجيل المشكلة التي يحدّدها المستخدم:Swift
#error (Register for API Key and insert here. Then delete this line.)
Objective-C
#error Register for API Key and insert here.
- أنشئ المشروع وشغِّله. تظهر نافذة محاكي iOS، وتعرض قائمة بالعروض التوضيحية لحزمة تطوير البرامج (SDK) لتطبيق "خرائط Google".
- اختَر أحد الخيارات المعروضة لتجربة إحدى ميزات حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" لتطبيقات iOS.
- إذا طُلب منك السماح لتطبيق GoogleMapsDemos بالوصول إلى موقعك الجغرافي، اختَر السماح.