Bắt đầu với SDK địa điểm cho iOS (Objective-C)

1. Trước khi bắt đầu

Trước khi bắt đầu mã hóa, bạn cần thiết lập một vài điều kiện tiên quyết.

Xcode

Hướng dẫn này sử dụng công cụ Xcode của Apple, cùng với ngôn ngữ Objective-C để tạo một ứng dụng iOS đơn giản chạy trong trình mô phỏng. Bạn không cần thiết bị thực. Bạn có thể tải Xcode tại https://developer.apple.com/xcode/

CocaaPods

SDK địa điểm cho iOS có sẵn dưới dạng nhóm CocoaPods. CocoaPods là một công cụ quản lý phần phụ thuộc nguồn mở cho các dự án Swift và Objective-C. Nếu bạn chưa có công cụ này, bạn sẽ cần cài đặt công cụ đó trước khi thực hiện các bước khác. Bạn có thể cài đặt ứng dụng từ thiết bị đầu cuối như sau:

sudo gem install cocoapods

Để biết thêm thông tin về CocoaPods, hãy xem phần Hướng dẫn bắt đầu sử dụng CoaaPods.

Cài đặt SDK

Để cài đặt SDK, bạn cần tạo một Podfile trong thư mục dự án của mình mà CocoaPods sẽ sử dụng để tải xuống và định cấu hình các phần phụ thuộc cần thiết. Cách dễ nhất để thực hiện việc này là tạo Dự án mới trong Xcode, thêm Podfile vào đó và cài đặt các nhóm ở đó.

Mở Xcode và bạn sẽ thấy màn hình "Chào mừng bạn đến với Xcode\39;. Tại đây, hãy chọn "Tạo dự án Xcode mới#39";

4f1ecee473937c7b.png

Trên màn hình tiếp theo, bạn sẽ được yêu cầu cung cấp mẫu cho dự án mới. Chọn "Chế độ xem đơn\39"; đối với iOS rồi nhấn "Tiếp theo\39";

Khi được hỏi về Tên sản phẩm, bạn có thể chọn bất kỳ nội dung nào bạn thích, nhưng hãy nhớ ghi lại Mã nhận dạng gói được tạo cho bạn. Sau này bạn sẽ cần đến ứng dụng đó.

72fbf25cb2db22ad.png

Nhấn "Tiếp theo\39"; dự án sẽ được tạo cho bạn. Ghi lại thư mục mà thư mục được tạo. Đóng Xcode và sử dụng Thiết bị đầu cuối, chuyển đến thư mục đó.

Sử dụng Terminal, nhập lệnh sau:

pod init

Tệp có tên Podfile sẽ được tạo cho bạn. Hãy chỉnh sửa để thêm một nhóm cho Google Maps như thế này:

target '{YOUR APP NAME}' do
pod 'GoogleMaps'
end

Lưu và đóng Xcode. Hãy nhớ đóng dự án này vì trong bước tiếp theo, bạn sẽ chỉnh sửa dự án cơ bản. Bạn sẽ mở một tệp dự án khác sau khi tệp đó hoàn tất, và việc nhà phát triển bị nhầm lẫn là nơi mọi người thường nhầm lẫn về vị trí nếu họ đã không đóng Xcode trước đó! Bây giờ, trong thiết bị đầu cuối, hãy chuyển đến thư mục dự án của bạn và chạy "pod install/?39"; như sau:

789c5bc62817f68a.png

Sau khi bạn hoàn tất, các nhóm sẽ được cài đặt và một tệp .xcworkspace mới sẽ được tạo. Từ giờ, hãy dùng thuộc tính này cho dự án. Nhưng, trước khi lập trình, điều tiếp theo bạn cần là một khóa API.

2. Nhận Khóa API của bạn

Bật bước Maps SDK cho iOS cho bước bật sau đây.

Thiết lập Nền tảng Google Maps

Nếu bạn chưa có tài khoản Google Cloud Platform và một dự án đã bật tính năng thanh toán, vui lòng xem hướng dẫn Bắt đầu sử dụng Google Maps Platform để tạo tài khoản thanh toán và một dự án.

  1. Trong Cloud Console, hãy nhấp vào trình đơn thả xuống dự án và chọn dự án mà bạn muốn sử dụng cho lớp học lập trình này.

  1. Bật API và SDK của Nền tảng Google Maps bắt buộc cho lớp học lập trình này trong Google Cloud Marketplace. Để làm như vậy, hãy làm theo các bước trong video này hoặc tài liệu này.
  2. Tạo khoá API trong trang Thông tin xác thực của Cloud Console. Bạn có thể làm theo các bước trong video này hoặc tài liệu này. Tất cả các yêu cầu gửi đến Google Maps Platform đều yêu cầu khóa API.

3. Tạo ứng dụng API địa điểm

Bây giờ bạn đã tạo một dự án bảng điều khiển và kích hoạt API Địa điểm của dự án đó, nhận được khóa API, bạn đã sẵn sàng bắt đầu mã hóa ứng dụng API Địa điểm đầu tiên của mình.

Trước đó, khi bạn cài đặt các tệp nhóm, bạn có thể tạo một tệp .xcworkspace mới cho mình. Mở tiện ích này bằng cách nhấp đúp vào không gian đó.

19d62f34c08e645c.png

Bạn sẽ thấy trong Trình khám phá dự án rằng bây giờ, bạn có một thư mục mới có tên "Pods#39". Nếu cách này hoạt động thành công, bạn sẽ thấy một thư mục GoogleMaps trong đó có các khung.

8844d861f64c61aa.png

4. Chỉnh sửa tệp Info.plist.

Khi bạn chạy ứng dụng lần đầu tiên, iOS sẽ cung cấp cho bạn hộp thoại yêu cầu người dùng cấp quyền truy cập dịch vụ vị trí. Hộp thoại này sẽ cung cấp chuỗi mà bạn xác định và đặt chuỗi đó vào tệp Info.plist. Nếu chuỗi này không hiện diện, hộp thoại sẽ không hiển thị và ứng dụng của bạn sẽ không hoạt động.

Bạn có thể tìm thấy tệp Info.plist trong trình khám phá dự án tại đây:

c224c920ab3f1ef.png

Chọn nút này và bạn sẽ thấy trình chỉnh sửa plist.

859ca56f3b19da5.png

Di chuột qua bất kỳ thành phần nào và bạn sẽ thấy biểu tượng "+"+33. Nhấn phím này và bạn sẽ thấy một mục mới xuất hiện. Nhập giá trị "NSLocationLuônLuôn mô tả#39; vào hộp này.

9fb225d6f5508794.png

Nhấn phím Enter để thêm khóa mới. Sau đó, hãy nhấp đúp vào cột Giá trị cho khóa này và thêm một chuỗi:

5ae©184187aa58.png

Để tìm hiểu thêm về chuỗi này, hãy xem tài liệu dành cho nhà phát triển của Apple tại đây.

5. Chỉnh sửa Người được ủy quyền cho ứng dụng của bạn

Trong trình khám phá dự án, hãy tìm và mở AppDelegate.m. Bạn sẽ dùng thông tin này để thêm khóa API.

Ở đầu tệp, hãy thêm phần này ngay bên dưới dòng #import:

@import GoogleMaps;

Sau đó, trong hàm hàm DidFinishLaunchingWithOptions: thêm nội dung sau chỉ về dòng "return YES\39;:

[GMSServices provideAPIKey:@"<Add your API Key>"];

Đảm bảo sử dụng Khóa API mà bạn đã tạo trước đó.

6. Chỉnh sửa tệp Bảng phân cảnh của bạn

Trong trình khám phá dự án, hãy mở tệp Main.storyboard. Đảm bảo thanh bên đang hoạt động bằng cách nhấn nút thanh bên ở góc trên cùng bên phải.

352af28b970d9e2.png

Sau đó, ở cuối thanh bên, hãy tìm phần Kiểm soát nhãn bằng cách đảm bảo chọn Thư viện đối tượng.

adec7051ae949531.png

Trong Cảnh xem bộ điều khiển chế độ xem ở bên trái, hãy đảm bảo đã chọn "Chế độ xem\39";

e4827b92b5861e3e.png

Sau đó, kéo và thả 7 nhãn vào chế độ xem. Sắp xếp chúng như minh họa ở đây. Hãy kéo kích thước để phù hợp với nội dung được hiển thị. Bạn có thể chỉnh sửa văn bản trong nhãn bằng cách nhấp đúp vào văn bản đó và nhập giá trị bắt buộc:

f8a9457772358069.png

Đối với nhãn dưới cùng (nhãn thực sự lớn), hãy chuyển đến trình chỉnh sửa tài sản và đảm bảo rằng nhãn có 0 dòng (Giá trị mặc định là 1). Nhờ đó, thuộc tính này có thể hiển thị nhiều dòng.

a4abacf00d8888fe.png

7. Tạo ổ cắm cho giá trị

Đối với 3 nhãn [giá trị\39;, bạn sẽ cần tạo một ổ cắm. Nhờ đó, bạn có thể thay đổi giá trị của các chiến dịch đó bằng cách sử dụng mã. Để làm điều này, trước tiên bạn cần kích hoạt trình chỉnh sửa Trợ lý. Để làm việc này, trước tiên, hãy đóng thanh bên thuộc tính bằng cách nhấp vào nút của thuộc tính để xóa thanh bên. (Nút này được hiển thị trong bước trước đó)

Sau đó, chọn nút trợ lý – đó là vòng tròn kép hiển thị ở đây:

e92dcc4ceea20a51.png

Đảm bảo rằng tệp đó đang hiển thị tệp ViewController.h. Nếu không, bạn có thể thay đổi tùy chọn này bằng cách sử dụng trình chỉnh sửa ở đầu cửa sổ trợ lý:

d42f0fcc18b84703.png

Sau đó, khi giữ phím thấy âm thanh, hãy kéo từng nhãn rồi thả xuống dưới dòng @Giao diện của tệp ViewController.h trong trợ lý. Một hộp thoại sẽ bật lên để hỏi loại kết nối bạn muốn thực hiện:

a44b7888ed0f62b.png

Đảm bảo rằng các chế độ cài đặt hiển thị (Kết nối: Ổ cắm; Loại: UILabel; Bộ nhớ: Yếu), sau đó đặt tên cho từng chế độ cài đặt. Trong phạm vi của lớp học lập trình này, tôi đã gọi các nhãn Kinh độ, Vĩ độ và Độ cao tương ứng là lblkinh độ, lblAlt và lblAltidude tương ứng. Ngoài ra, hãy kéo nhãn lớn từ dưới cùng lên và gọi là lbl Places.

Khi bạn hoàn tất, tệp ViewController.h sẽ có dạng như sau:

#import <UIKit/UIKit.h>
@import GoogleMaps;

@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *lblLatitude;
@property (weak, nonatomic) IBOutlet UILabel *lblLongitude;
@property (weak, nonatomic) IBOutlet UILabel *lblAltitude;
@property (weak, nonatomic) IBOutlet UILabel *lblPlaces;

@end

8. Chỉnh sửa tệp tiêu đề cho API Vị trí và API Ứng dụng khách của Google

Trước khi thực hiện các bước cuối cùng – nơi bạn tạo ứng dụng để sử dụng API địa điểm, bạn cần thiết lập một vài biến khác trong tệp tiêu đề (ViewController.h). Đây là đối tượng Trình quản lý vị trí chính và đối tượng Vị trí cốt lõi:

@property (strong, nonatomic) CLLocationManager *locationManager;
@property (strong, nonatomic) CLLocation *location;

Bạn cũng sẽ cần có một ứng dụng khách của API Google:

@property GMSPlacesClient *placesClient;

Cuối cùng, bạn sẽ cần cập nhật tệp tiêu đề để lớp này triển khai CLLocationManagerDelegate:

@interface ViewController : UIViewController<CLLocationManagerDelegate>

Khi bạn hoàn tất, tệp tiêu đề của bạn sẽ trông như thế này:

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import <GoogleMaps/GoogleMaps.h>


@interface ViewController : UIViewController<CLLocationManagerDelegate>
@property (strong, nonatomic) CLLocationManager *locationManager;
@property (strong, nonatomic) CLLocation *location;
@property (weak, nonatomic) IBOutlet UILabel *lblLongitude;
@property (weak, nonatomic) IBOutlet UILabel *lblLatitude;
@property (weak, nonatomic) IBOutlet UILabel *lblAltitude;
@property (weak, nonatomic) IBOutlet UILabel *lblPlaces;

@property GMSPlacesClient *placesClient;
@end

9. Chỉnh sửa Bộ điều khiển chế độ xem

Bước đầu tiên là chỉnh sửa hàm viewDidLoad để khởi chạy Trình quản lý vị trí, yêu cầu người dùng ủy quyền truy cập vị trí và cuối cùng khởi động trình quản lý vị trí để theo dõi vị trí hiện tại. Bạn cũng sẽ khởi chạy ứng dụng API Google Địa điểm.

- (void)viewDidLoad {
    [super viewDidLoad];
    self.locationManager = [[CLLocationManager alloc]init];
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
        [self.locationManager requestAlwaysAuthorization];
        // Or [self.locationManager requestWhenInUseAuthorization];
    }
    [self.locationManager startUpdatingLocation];
    
    self.locationManager.delegate = self;
    self.location = [[CLLocation alloc] init];
    self.placesClient = [GMSPlacesClient sharedClient];
}

10. Xử lý thông tin cập nhật về vị trí

Người quản lý vị trí sẽ gọi lại Bộ điều khiển chế độ xem kèm theo thông tin cập nhật vị trí bằng cách gọi hàm DidUpdateLocation. Bạn sẽ cần thêm mã này vào ViewController.m. Hàm này có dạng như sau:

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
    // Enter code here
}

Hàm này sẽ cần làm một số việc.

Trước tiên, vị trí này sẽ lưu vị trí bằng vị trí nhận được cuối cùng:

self.location = locations.lastObject;

Tiếp theo, bạn nên cập nhật ba nhãn cho Vĩ độ, Kinh độ và Độ cao:

self.lblLatitude.text = [NSString stringWithFormat:@"%f", self.location.coordinate.latitude];

self.lblLongitude.text = [NSString stringWithFormat:@"%f", self.location.coordinate.longitude];

self.lblAltitude.text = [NSString stringWithFormat:@"%f", self.location.altitude];

Tiếp theo, bạn sẽ gọi API Địa điểm bằng cách sử dụng Ứng dụng địa điểm. Bạn làm như vậy bằng cách chỉ định hàm callback, hàm này sẽ lấy danh sách các địa điểm. API địa điểm xác định khả năng bạn đang ở một địa điểm cụ thể dựa trên vị trí của mình. Trả về tên của các địa điểm có thể có, cùng với giá trị từ 0 đến 1 chứa xác suất rằng bạn đang ở địa điểm đó.

[self.placesClient currentPlaceWithCallback:^(GMSPlaceLikelihoodList *likelihoodList, NSError *error) {

Sau đó, bạn có thể triển khai lệnh gọi lại. Thao tác này sẽ lặp lại trong danh sách khả năng, thêm địa điểm và khả năng cho những địa điểm đó.

[self.placesClient currentPlaceWithCallback:^(GMSPlaceLikelihoodList *likelihoodList, NSError *error) {

  if (error != nil) {
    NSLog(@"Current Place error %@", [error localizedDescription]);
    return;
  }
  NSMutableString *strPlaces = [NSMutableString stringWithString:@""];

  for (GMSPlaceLikelihood *likelihood in likelihoodList.likelihoods) {
    GMSPlace* place = likelihood.place;
    NSLog(@"Current Place name %@ at likelihood %g", place.name,
            likelihood.likelihood);
    NSLog(@"Current Place address %@", place.formattedAddress);
    NSLog(@"Current Place attributions %@", place.attributions);
    NSLog(@"Current PlaceID %@", place.placeID);
    [strPlaces appendString:place.name];
    [strPlaces appendString:@" "];
    [strPlaces appendFormat:@"%g",likelihood.likelihood];
    [strPlaces appendString:@"\n"];
  }
  self.lblPlaces.text = strPlaces;
}];

Khi bạn hoàn tất, hàm DidUpdateLocation sẽ có dạng như sau:

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
    
    self.location = locations.lastObject;
    self.lblLatitude.text = [NSString stringWithFormat:@"%f", self.location.coordinate.latitude];
    self.lblLongitude.text = [NSString stringWithFormat:@"%f", self.location.coordinate.longitude];
    self.lblAltitude.text = [NSString stringWithFormat:@"%f", self.location.altitude];
    
    NSLog(@"%@", self.location.description);
    
    [self.placesClient currentPlaceWithCallback:^(GMSPlaceLikelihoodList *likelihoodList, NSError *error) {

        if (error != nil) {
            NSLog(@"Current Place error %@", [error localizedDescription]);
            return;
        }
        NSMutableString *strPlaces = [NSMutableString stringWithString:@""];
        
        for (GMSPlaceLikelihood *likelihood in likelihoodList.likelihoods)  
        {
            GMSPlace* place = likelihood.place;
            NSLog(@"Current Place name %@ at likelihood %g", place.name, likelihood.likelihood);
            NSLog(@"Current Place address %@", place.formattedAddress);
            NSLog(@"Current Place attributions %@", place.attributions);
            NSLog(@"Current PlaceID %@", place.placeID);
            [strPlaces appendString:place.name];
            [strPlaces appendString:@" "];
            [strPlaces appendFormat:@"%g",likelihood.likelihood];
            [strPlaces appendString:@"\n"];
        }
        self.lblPlaces.text = strPlaces;
    }];
}

Bây giờ, bạn đã sẵn sàng để chạy ứng dụng của mình và thử nghiệm ứng dụng!

11. Chạy ứng dụng trong Trình mô phỏng

Bạn chạy ứng dụng bằng nút chạy trong thanh tiêu đề. Điều này cũng cho phép bạn chọn loại lần chạy và như bạn có thể thấy tại đây, tôi đang thử nghiệm trên iPhone 6 bằng cách sử dụng trình mô phỏng.

bbbe0b8820c8a913.png

Khi bạn nhấn vào nút chạy, ứng dụng sẽ được tạo và khởi chạy. Bạn sẽ thấy yêu cầu cho phép ứng dụng truy cập vị trí, bao gồm chuỗi tùy chỉnh mà bạn đã chỉ định trước đó.

b9bb2ace7e68f186.png

Khi thực hiện việc này, bạn sẽ thấy thông tin cập nhật vĩ độ và kinh độ. Để thay đổi vị trí, chọn trình đơn Gỡ lỗi và chọn vị trí. Ví dụ: bạn có thể chọn "Đường cao tốc đường cao"3

dcb1ce091d780f56.png

Khi bạn thực hiện việc này, bạn sẽ thấy vị trí đó với các địa điểm có thể là địa điểm cập nhật, mô phỏng đường lái xe vào xa lộ.

649e3eeb2321ae03.png

Và vậy là bạn đã xong! Bạn đã truy cập thành công thông tin chi tiết về địa điểm hiện tại bằng cách sử dụng API Google Địa điểm trên iOS.