更新到版本 3.0.2 后,地方自动完成功能不起作用 - Google iOS sdk
Place auto complete is not working after updating to version 3.0.2 - Google iOS sdk
我使用 GMSAutocompleteResultsViewController
实现了位置自动完成功能,目前运行良好。但是当我将 sdk 更新到 3.0.2 时停止工作。如果我恢复到版本 2.7.0 开始工作。
我已经完成了 migrationguide not getting what I am missing. I checked the examples 没有观察到任何变化。有人会指出我正确的方向以使其再次工作吗?
class PlaceAutoCompleteController: BaseViewController {
//MARK: - Property declaration
private var resultsViewController = GMSAutocompleteResultsViewController()
private lazy var searchController = UISearchController(searchResultsController: resultsViewController)
private var viewModel: PlaceTypeAheadViewModel
var storeSelectionDelegate: StoreSelectionDelegate?
//MARK: - Life cycle
init(withViewModel aviewModel: PlaceTypeAheadViewModel) {
viewModel = aviewModel
super.init()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
setupProperties()
}
}
//MARK: - Property setup
extension PlaceAutoCompleteController {
/// Setting up view default properties
func setupProperties() {
resultsViewController.view.backgroundColor = UIColor.white
resultsViewController.tableCellBackgroundColor = .white
resultsViewController.delegate = self
// Specify the place data types to return.
// let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) |
// UInt(GMSPlaceField.placeID.rawValue))!
// resultsViewController.placeFields = fields
let filter = GMSAutocompleteFilter()
//suitable filter type
filter.type = .establishment
filter.country = viewModel.getCountryId()
resultsViewController.autocompleteFilter = filter
searchController.searchResultsUpdater = resultsViewController
// Put the search bar in the navigation bar.
searchController.searchBar.sizeToFit()
searchController.searchBar.placeholder = "Search places"
let searchBgView = UIView(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: 44))
searchBgView.addSubview(searchController.searchBar)
view.addSubview(searchBgView)
// Prevent the navigation bar from being hidden when searching.
searchController.hidesNavigationBarDuringPresentation = false
// This makes the view area include the nav bar even though it is opaque.
// Adjust the view placement down.
extendedLayoutIncludesOpaqueBars = false
edgesForExtendedLayout = []
}
}
// Handle the user's selection.
extension PlaceAutoCompleteController: GMSAutocompleteResultsViewControllerDelegate {
func resultsController(_ resultsController: GMSAutocompleteResultsViewController,
didAutocompleteWith place: GMSPlace) {
searchController.isActive = false
AppManager.setPlace(withPlaceId: place.placeID ?? "" , name: place.name ?? "" , latitude: place.coordinate.latitude, longitude: place.coordinate.longitude)
openStoreSelection()
}
func resultsController(_ resultsController: GMSAutocompleteResultsViewController,
didFailAutocompleteWithError error: Error){
// TODO: handle the error.
print("Error: ", error.localizedDescription)
}
// Turn the network activity indicator on and off again.
func didRequestAutocompletePredictions(_ viewController: GMSAutocompleteViewController) {
UIApplication.shared.isNetworkActivityIndicatorVisible = true
}
func didUpdateAutocompletePredictions(_ viewController: GMSAutocompleteViewController) {
UIApplication.shared.isNetworkActivityIndicatorVisible = false
}
/// Open store selection screen with selected country
func openStoreSelection() {
navigateToStoreSelection()
}
}
提前致谢。
获得了商务人员的访问权限,接受了隐私政策,但我在他们之前共享的凭据中找不到应用程序密钥。
现在我开始使用 iOS 密钥(由 Google 服务自动创建),它与更新的 sdk 版本即 3.0.3
完美配合
在您的 Google 云项目中:
- 确保您启用了 "Places API"。旧的 "Places SDK for iOS" 不适用于 3.0.0 版本的 SDK。
- 用 "Places API" 代替 "Places SDK for iOS"
更新 API 密钥的 API 限制
- 为您的Google云项目
设置账单明细
我使用 GMSAutocompleteResultsViewController
实现了位置自动完成功能,目前运行良好。但是当我将 sdk 更新到 3.0.2 时停止工作。如果我恢复到版本 2.7.0 开始工作。
我已经完成了 migrationguide not getting what I am missing. I checked the examples 没有观察到任何变化。有人会指出我正确的方向以使其再次工作吗?
class PlaceAutoCompleteController: BaseViewController {
//MARK: - Property declaration
private var resultsViewController = GMSAutocompleteResultsViewController()
private lazy var searchController = UISearchController(searchResultsController: resultsViewController)
private var viewModel: PlaceTypeAheadViewModel
var storeSelectionDelegate: StoreSelectionDelegate?
//MARK: - Life cycle
init(withViewModel aviewModel: PlaceTypeAheadViewModel) {
viewModel = aviewModel
super.init()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
setupProperties()
}
}
//MARK: - Property setup
extension PlaceAutoCompleteController {
/// Setting up view default properties
func setupProperties() {
resultsViewController.view.backgroundColor = UIColor.white
resultsViewController.tableCellBackgroundColor = .white
resultsViewController.delegate = self
// Specify the place data types to return.
// let fields: GMSPlaceField = GMSPlaceField(rawValue: UInt(GMSPlaceField.name.rawValue) |
// UInt(GMSPlaceField.placeID.rawValue))!
// resultsViewController.placeFields = fields
let filter = GMSAutocompleteFilter()
//suitable filter type
filter.type = .establishment
filter.country = viewModel.getCountryId()
resultsViewController.autocompleteFilter = filter
searchController.searchResultsUpdater = resultsViewController
// Put the search bar in the navigation bar.
searchController.searchBar.sizeToFit()
searchController.searchBar.placeholder = "Search places"
let searchBgView = UIView(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: 44))
searchBgView.addSubview(searchController.searchBar)
view.addSubview(searchBgView)
// Prevent the navigation bar from being hidden when searching.
searchController.hidesNavigationBarDuringPresentation = false
// This makes the view area include the nav bar even though it is opaque.
// Adjust the view placement down.
extendedLayoutIncludesOpaqueBars = false
edgesForExtendedLayout = []
}
}
// Handle the user's selection.
extension PlaceAutoCompleteController: GMSAutocompleteResultsViewControllerDelegate {
func resultsController(_ resultsController: GMSAutocompleteResultsViewController,
didAutocompleteWith place: GMSPlace) {
searchController.isActive = false
AppManager.setPlace(withPlaceId: place.placeID ?? "" , name: place.name ?? "" , latitude: place.coordinate.latitude, longitude: place.coordinate.longitude)
openStoreSelection()
}
func resultsController(_ resultsController: GMSAutocompleteResultsViewController,
didFailAutocompleteWithError error: Error){
// TODO: handle the error.
print("Error: ", error.localizedDescription)
}
// Turn the network activity indicator on and off again.
func didRequestAutocompletePredictions(_ viewController: GMSAutocompleteViewController) {
UIApplication.shared.isNetworkActivityIndicatorVisible = true
}
func didUpdateAutocompletePredictions(_ viewController: GMSAutocompleteViewController) {
UIApplication.shared.isNetworkActivityIndicatorVisible = false
}
/// Open store selection screen with selected country
func openStoreSelection() {
navigateToStoreSelection()
}
}
提前致谢。
获得了商务人员的访问权限,接受了隐私政策,但我在他们之前共享的凭据中找不到应用程序密钥。 现在我开始使用 iOS 密钥(由 Google 服务自动创建),它与更新的 sdk 版本即 3.0.3
完美配合在您的 Google 云项目中:
- 确保您启用了 "Places API"。旧的 "Places SDK for iOS" 不适用于 3.0.0 版本的 SDK。
- 用 "Places API" 代替 "Places SDK for iOS" 更新 API 密钥的 API 限制
- 为您的Google云项目 设置账单明细