我在我的应用程序中使用Uber和Lyft deeplink。功能是,当用户点击“搭乘超级车”或“搭乘lyft”按钮时,它将打开Uber或Lyft应用程序,并向Uber / Lyft发送接送和目的地坐标,Uber / Lyft应用程序将处理此行程。
我为Uber使用了标准的deeplink。当Uber已经在后台打开并运行时,一切正常。当Uber不在后台时,拾取位置变为用户的当前位置(这是错误的,因为用户想要指定拾取位置,不一定是当前位置)。但这个问题在Lyft中不会发生。
这是我的代码:
class ViewController: UIViewController {
@IBOutlet weak var uberBtn: UIButton!
@IBOutlet weak var lyftBtn: UIButton!
@IBAction func uberClicked(_ sender: Any) {
if isInstalledOf(app: "uber") {
open(scheme: "uber://?action=setPickup&client_id=7r6zjXf5e1p4nqYkX17d9R44estKs-na&product_id=a12ab23b-66f0-4028-9bb9-856dbcfdbbc7&pickup[formatted_address]=5874%20Newberry%20Street%2C%20Romulus%2C%20MI%2C%20USA&pickup[latitude]=42.265570&pickup[longitude]=-83.387391&dropoff[formatted_address]=15609%20Regina%20Avenue%2C%20Allen%20Park%2C%20MI%2C%20USA&dropoff[latitude]=42.253737&dropoff[longitude]=-83.211945")
} else {
open(scheme: "https://m.uber.com/ul/")
}
}
@IBAction func lyftClicked(_ sender: Any) {
if isInstalledOf(app: "lyft") {
open(scheme: "lyft://ridetype?id=lyft&pickup[latitude]=42.265570&pickup[longitude]=-83.387391&destination[latitude]=42.253737&destination[longitude]=-83.211945")
} else {
open(scheme: "https://www.lyft.com/signup/SDKSIGNUP?clientId=IcEuyAmFO7Gp&sdkName=iOS_direct")
}
}
// check if the app is installed
func isInstalledOf(app: String) -> Bool {
return UIApplication.shared.canOpenURL(URL(string: "\(app)://")!)
}
func open(scheme: String) {
if let url = URL(string: scheme) {
if #available(iOS 10, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(url)
}
}
}
}
使用Uber SDK并传递deeplink所需的参数。要解决取件地点问题,您需要传递取件名称和取件地址
let pickupLocation = CLLocation(latitude: <pickup latitude>, longitude: <pickup longitude>)
let dropoffLocation = CLLocation(latitude: <destination latitude>, longitude: <destination longitude>)
let builder = RideParametersBuilder()
builder.pickupLocation = pickupLocation
builder.pickupNickname = <pickup nickname>
builder.pickupAddress = <pickup address>
builder.dropoffLocation = dropoffLocation
builder.dropoffNickname = <dropof nickname>
builder.dropoffAddress = <dropof address>
builder.productID = productId
let deeplink = RequestDeeplink(rideParameters: builder.build(), fallbackType: .appStore)
deeplink.execute()
我从Uber得到确认(10/29/2018),这个问题是内部的。当Uber未打开时,会出现此问题,Android没有此问题。他们目前正在努力解决这个问题,但遗憾的是现在没有ETA。以下是来自优步的消息:
谢谢你的报道。我在Github上看到了这个问题:https://github.com/uber/rides-ios-sdk/issues/249 ......我可以确认这个问题。它在Android上正常运行,但在应用程序未打开时无法在IOS上正常运行。不幸的是没有ETA,但我会尝试在内部正确路由。