Sau khi bật tính năng thanh toán và tạo khoá API, bạn có thể thiết lập Dự án Xcode mà bạn sử dụng để phát triển ứng dụng của mình.
Mỗi ứng dụng đều có ghi chú phát hành bản phát hành.
Bước 1: Cài đặt phần mềm cần thiết
Để tạo dự án bằng cách sử dụng SDK Địa điểm dành cho iOS, bạn cần:
- Xcode phiên bản 15.0 trở lên
Bước 2: Tạo dự án Xcode và cài đặt SDK Địa điểm dành cho iOS
Trình quản lý gói Swift
Có thể cài đặt SDK Địa điểm dành cho iOS qua Trình quản lý gói Swift. Để thêm SDK, hãy đảm bảo bạn có xoá mọi SDK Địa điểm hiện có cho phần phụ thuộc iOS.
Để thêm SDK vào dự án mới hoặc dự án hiện có, hãy làm theo các bước sau:
-
Mở Xcode
project
hoặcworkspace
của bạn, sau đó chuyển đến Tệp > Thêm phần phụ thuộc của gói. - Nhập https://github.com/googlemaps/ios-places-sdk làm URL, nhấn Enter để lấy gói rồi nhấp vào "Add Package" (Thêm gói).
-
Để cài đặt một
version
cụ thể, hãy đặt trường Quy tắc phần phụ thuộc thành một trong các tuỳ chọn dựa trên phiên bản. Đối với các dự án mới, bạn nên chỉ định phiên bản mới nhất và bằng cách sử dụng "Phiên bản chính xác" . Sau khi hoàn tất, hãy nhấp vào "Add Package" (Thêm gói). -
Trong cửa sổ Choose Package Products (Chọn sản phẩm gói), xác minh để đảm bảo
GooglePlaces
sẽ được thêm vào mục tiêumain
bạn chỉ định. Sau khi hoàn tất, hãy nhấp vào "Add Package" (Thêm gói). -
Để xác minh chế độ cài đặt của bạn, hãy chuyển đến ngăn
General
của mục tiêu. Trong Khung, Thư viện và Nội dung được nhúng, bạn sẽ thấy các gói đã cài đặt. Bạn cũng có thể xem phần "Phần phụ thuộc của gói" của "Project Navigator" (Trình điều hướng dự án) để xác minh gói và phiên bản của gói.
Để cập nhật package
cho một dự án hiện có, hãy làm theo các bước sau:
Nếu đang nâng cấp từ một phiên bản cũ hơn 9.0.0,bạn phải gỡ bỏ các phần phụ thuộc sau:
GoogleMapsBase
,GoogleMapsCore
vàGoogleMapsM4B
sau khi nâng cấp. Không xoá phần phụ thuộc củaGoogleMaps
. Để biết thêm thông tin, hãy xem Ghi chú phát hành phiên bản 9.0.0.Trong phần cài đặt cấu hình dự án Xcode của bạn, hãy tìm Khung, Thư viện và Nội dung được nhúng. Sử dụng dấu trừ(-) để loại bỏ khung sau:
GoogleMapsBase
(Chỉ dành cho bản nâng cấp từ các phiên bản cũ hơn 9.0.0)GoogleMapsCore
(Chỉ dành cho bản nâng cấp từ các phiên bản cũ hơn 9.0.0)GoogleMapsM4B
(Chỉ dành cho bản nâng cấp từ các phiên bản cũ hơn 9.0.0)
- Từ Xcode, hãy chuyển đến "Tệp > Gói hàng > Hãy cập nhật lên phiên bản gói mới nhất".
- Để xác minh việc cài đặt của bạn, hãy chuyển đến phần Package Dependencies (Phần phụ thuộc gói) của Project Navigator (Trình điều hướng dự án) để xác minh gói và phiên bản của gói.
Để xoá SDK Địa điểm hiện có cho các phần phụ thuộc iOS đã được thêm bằng cách sử dụng
CocoaPods
, hãy làm theo các bước sau:
- Đóng không gian làm việc Xcode của bạn. Mở terminal và thực thi lệnh sau:
sudo gem install cocoapods-deintegrate cocoapods-clean pod deintegrate pod cache clean --all
-
Xoá
Podfile
,Podfile.resolved
và Xcodeworkspace
nếu bạn không sử dụng chúng cho bất kỳ mục đích nào khác không phải là CocoaPods.
-
Trong phần cài đặt cấu hình dự án Xcode của bạn, hãy tìm Khung, Thư viện
và Nội dung được nhúng. Sử dụng dấu trừ(-) để loại bỏ khung sau:
GooglePlaces.xcframework
-
Từ thư mục cấp cao nhất của dự án Xcode, hãy xóa
GooglePlaces
gói.
CocoaPods
SDK Địa điểm dành cho iOS được cung cấp dưới dạng CocoaPod pod, GooglePlaces, chứa tất cả các tính năng về địa điểm.
CocoaPods là trình quản lý phần phụ thuộc nguồn mở cho Swift và Target-C Dự án về ca cao. Nếu bạn chưa có công cụ CocoaPods, hãy cài đặt công cụ đó trên macOS bằng cách chạy lệnh sau đây trên cửa sổ dòng lệnh. Để biết thông tin chi tiết, hãy xem hướng dẫn bắt đầu sử dụng CocoaPods.
sudo gem install cocoapods
Tạo một Podfile
cho SDK Địa điểm dành cho iOS và sử dụng
để cài đặt SDK và các phần phụ thuộc của SDK đó:
- Nếu bạn chưa có dự án Xcode, hãy tạo một dự án ngay bây giờ và lưu vào máy cục bộ của bạn. Nếu bạn mới phát triển iOS, hãy tạo một dự án mới và chọn Mẫu ứng dụng iOS.
- Tạo một tệp có tên
Podfile
trong thư mục dự án. Chiến dịch này tệp xác định các phần phụ thuộc của dự án. - Chỉnh sửa
Podfile
và thêm các phần phụ thuộc cùng với phiên bản của chúng. Dưới đây là một ví dụ chỉ định tên mục tiêu ứng dụng và tên của nhómGooglePlaces
:source 'https://github.com/CocoaPods/Specs.git' platform :ios, '15.0' target 'YOUR_APPLICATION_TARGET_NAME_HERE' do pod 'GooglePlaces', '8.3.0' end
Hãy nhớ thường xuyên chạypod outdated
để phát hiện khi có sự kiện mới hơn để đảm bảo bạn luôn sử dụng phiên bản mới nhất. - Lưu
Podfile
. Mở cửa sổ dòng lệnh và chuyển đến thư mục chứa
Podfile
:cd <path-to-project>
Chạy lệnh
pod install
. Thao tác này sẽ cài đặt API được chỉ định trongPodfile
cùng với mọi phần phụ thuộc mà chúng có thể có.pod install
Đóng Xcode rồi mở (nhấp đúp)
.xcworkspace
để chạy Xcode. Kể từ thời điểm này trở đi, bạn phải dùng tệp.xcworkspace
để mở dự án.
Để cập nhật API cho một dự án hiện có, hãy làm theo các bước sau:
- Mở cửa sổ dòng lệnh rồi chuyển đến thư mục dự án chứa
Podfile
. - Chạy lệnh
pod update
. Thao tác này sẽ cập nhật tất cả API chỉ định trongPodfile
thành phiên bản mới nhất.
Cài đặt theo cách thủ công
Hướng dẫn này cho biết cách thêm XCFramework chứa SDK địa điểm dành cho iOS theo cách thủ công vào dự án và định cấu hình chế độ cài đặt bản dựng trong Xcode. XCFramework là một gói nhị phân mà bạn có thể sử dụng trên nhiều nền tảng, bao gồm cả các máy bằng Apple Silicon.
- Tải các tệp tài nguyên và tệp nhị phân SDK sau đây xuống:
- Giải nén các tệp để truy cập vào XCFramework và tài nguyên.
- Chạy Xcode và mở một dự án hiện có hoặc tạo một dự án mới dự án. Nếu bạn mới phát triển iOS, hãy tạo một dự án mới và chọn Mẫu ứng dụng iOS.
- Xoá mọi gói Maps khỏi các bản phát hành trước đó khỏi dự án của bạn.
-
Mở thẻ Chung. Kéo XCFramework sau vào dự án của bạn
trong Frameworks, Libraries and Embedded Content (Khung, Thư viện và Nội dung được nhúng). Đảm bảo
để chọn Không nhúng:
GooglePlaces.xcframework
Kéo -
Sao chép
GooglePlaces.bundle
từ GooglePlacesResources mà bạn đã tải xuống thư mục cấp cao nhất của dự án Xcode. Hãy nhớ chọn Sao chép các mục vào thư mục của nhóm đích khi được nhắc. - Chọn dự án của bạn trên Project Navigator rồi chọn mục tiêu của ứng dụng.
-
Mở thẻ Tạo giai đoạn. Trong Liên kết tệp nhị phân với
Thư viện, hãy thêm các khung và thư viện sau:
CoreGraphics.framework
CoreLocation.framework
libc++.tbd
libz.tbd
QuartzCore.framework
UIKit.framework
-
Chọn dự án của bạn, thay vì mục tiêu cụ thể, rồi mở Build Settings (Cài đặt bản dựng). Trong liên kết Liên kết - Chung -> Trình liên kết khác Gắn cờ, thêm
-ObjC
vào "Gỡ lỗi" và "Release" (Phát hành). Nếu các yêu cầu này các chế độ cài đặt không hiển thị, hãy thay đổi bộ lọc trong thanh Build Settings (Cài đặt bản dựng) từ Cơ bản đến Tất cả.
GooglePlaces.bundle
từ GooglePlacesResources mà bạn đã tải xuống
GooglePlacesSwift
Bạn có thể cài đặt SDK GooglePlacesSwift (Xem trước) bằng Trình quản lý gói Swift, CocoaPods và theo cách thủ công. Chiến lược phát hành đĩa đơn các bước cài đặt trong tất cả quy trình phản ánh các bước đã nêu cho Địa điểm SDK dành cho iOS, với những điểm khác biệt sau:
- Cần có Xcode 15.3.
- Nếu sử dụng Trình quản lý gói Swift, bạn phải thay thế các bản sao của
GooglePlaces
cho thành viênGooglePlacesSwift
. Điều này bao gồm cả câu lệnh nhập. - Cập nhật số phiên bản lên 0.1.0.
- Nếu bạn cài đặt theo cách thủ công, hãy tải các tệp nhị phân SDK và tệp tài nguyên sau xuống:
Ví dụ: nếu sử dụng CocoaPods, Podfile
đã chỉnh sửa sẽ có dạng như sau:
source 'https://github.com/CocoaPods/Specs.git' platform :ios, '15.3' target 'YOUR_APPLICATION_TARGET_NAME_HERE' do pod 'GooglePlacesSwift', '0.1.0' end
Bước 3: Kiểm tra tệp kê khai về quyền riêng tư của Apple
Apple yêu cầu thông tin chi tiết về quyền riêng tư đối với các ứng dụng trên App Store. Hãy truy cập trang Thông tin chi tiết về quyền riêng tư trong App Store của Apple để biết thông tin cập nhật và thông tin khác.
Tệp kê khai về quyền riêng tư của Apple có trong gói tài nguyên cho SDK. Để xác minh rằng Tệp kê khai về quyền riêng tư đã được đưa vào tệp kê khai về quyền riêng tư, cũng như để kiểm tra nội dung trong đó, hãy tạo một bản lưu trữ ứng dụng rồi tạo báo cáo về quyền riêng tư trong kho lưu trữ đó.
Bước 4: Thêm khoá API vào ứng dụng của bạn
Trong các ví dụ sau, hãy thay thế YOUR_API_KEY
bằng khoá API.
Swift
Thêm khoá API vào AppDelegate.swift
của bạn như sau:
- Thêm câu lệnh nhập sau:
import GooglePlaces
- Thêm đoạn mã sau vào
application(_:didFinishLaunchingWithOptions:)
của bạn thay thế YOUR_API_KEY bằng khoá API:GMSPlacesClient.provideAPIKey("YOUR_API_KEY")
Objective-C
Thêm khoá API vào AppDelegate.m
của bạn như sau:
- Thêm câu lệnh nhập sau:
@import GooglePlaces;
- Thêm đoạn mã sau vào
application:didFinishLaunchingWithOptions:
của bạn thay thế YOUR_API_KEY bằng khoá API:[GMSPlacesClient provideAPIKey:@"YOUR_API_KEY"];
GooglePlacesSwift
Thêm khoá API vào AppDelegate.swift
của bạn như sau:
- Thêm câu lệnh nhập sau:
import GooglePlacesSwift
- Thêm đoạn mã sau vào
application(_:didFinishLaunchingWithOptions:)
của bạn thay thế YOUR_API_KEY bằng khoá API:PlacesClient.shared.provideAPIKey("YOUR_API_KEY")
Bước 5: Bắt đầu viết mã
Các mã mẫu sau đây minh hoạ cách lấy địa điểm hiện tại.
Swift
import GooglePlaces import UIKit class GetStartedViewController : UIViewController { // Add a pair of UILabels in Interface Builder, and connect the outlets to these variables. @IBOutlet private var nameLabel: UILabel! @IBOutlet private var addressLabel: UILabel! private var placesClient: GMSPlacesClient! override func viewDidLoad() { super.viewDidLoad() placesClient = GMSPlacesClient.shared() } // Add a UIButton in Interface Builder, and connect the action to this function. @IBAction func getCurrentPlace(_ sender: UIButton) { let placeFields: GMSPlaceField = [.name, .formattedAddress] placesClient.findPlaceLikelihoodsFromCurrentLocation(withPlaceFields: placeFields) { [weak self] (placeLikelihoods, error) in guard let strongSelf = self else { return } guard error == nil else { print("Current place error: \(error?.localizedDescription ?? "")") return } guard let place = placeLikelihoods?.first?.place else { strongSelf.nameLabel.text = "No current place" strongSelf.addressLabel.text = "" return } strongSelf.nameLabel.text = place.name strongSelf.addressLabel.text = place.formattedAddress } } }
Objective-C
#import "GetStartedViewController.h" @import GooglePlaces; @interface GetStartedViewController () // Add a pair of UILabels in Interface Builder and connect the outlets to these variables @property (weak, nonatomic) IBOutlet UILabel *nameLabel; @property (weak, nonatomic) IBOutlet UILabel *addressLabel; @end @implementation GetStartedViewController { GMSPlacesClient *_placesClient; } - (void)viewDidLoad { [super viewDidLoad]; _placesClient = [GMSPlacesClient sharedClient]; } // Add a pair of UILabels in Interface Builder and connect the outlets to these variables. - (IBAction)getCurrentPlace:(UIButton *)sender { GMSPlaceField placeFields = (GMSPlaceFieldName | GMSPlaceFieldFormattedAddress); __weak typeof(self) weakSelf = self; [_placesClient findPlaceLikelihoodsFromCurrentLocationWithPlaceFields:placeFields callback:^(NSArray<GMSPlaceLikelihood *> * _Nullable likelihoods, NSError * _Nullable error) { __typeof__(self) strongSelf = weakSelf; if (strongSelf == nil) { return; } if (error != nil) { NSLog(@"An error occurred %@", [error localizedDescription]); return; } GMSPlace *place = likelihoods.firstObject.place; if (place == nil) { strongSelf.nameLabel.text = @"No current place"; strongSelf.addressLabel.text = @""; return; } strongSelf.nameLabel.text = place.name; strongSelf.addressLabel.text = place.formattedAddress; }]; } @end
GooglePlacesSwift
struct ContentView: View { @State var place: Place? var body: some View { Button("Get Place") { // A hotel in Saigon with an attribution. let placeID = "ChIJV4k8_9UodTERU5KXbkYpSYs" let fetchPlaceRequest = FetchPlaceRequest( placeID: placeID, placeProperties: [.displayName, .formattedAddress] ) Task { switch await placesClient.fetchPlace(with: fetchPlaceRequest) { case .success(let place): self.place = place case .failure(let placesError): // Handle error } Text(swiftPlace?.displayName ?? "No place yet") .padding() Text(swiftPlace?.formattedAddress ?? "No place yet") .padding() } }
Các bước tiếp theo
Sau khi dự án được định cấu hình, bạn có thể khám phá ứng dụng mẫu.