如何跨平台与Android和IOS
Posted
技术标签:
【中文标题】如何跨平台与Android和IOS【英文标题】:How can I cross platform with Android and IOS 【发布时间】:2019-08-31 01:22:30 【问题描述】:我已经在 android 和 ios 中创建了一个应用程序。我是应用程序的最后一道障碍。我能够让 Android 用户与 IOS 用户一起工作,而 IOS 有一个 tableview。
现在我面临一个不同的问题。如果 iOS 应用程序上的“骑手”请求搭车并且 Android 驱动程序可用 - 我该如何完成这个用例?
如果iOS用户发出请求,流程如下:
func requestPressed(_ sender: Any)
print("... requestPressed")
let dict = selectedPin!.addressDictionary
if dict?.count == 0
// this isn't shown to the user, just in your debug window
print("no addresses available, try again in a few seconds")
return
destAddress = selectedPin!.addressDictionary!["Street"] as? String ?? "None"
if destAddress == "None"
print("no valid address available, try again in a few seconds")
return
if userLocation != nil
print("my userLocation: \(userLocation!)")
if canRequestRyde // if true ...
// get the destination area name, and the price
areaNameDestination = DriveHandler.Instance.getAreaName(latitude: destLat, longitude: destLong)
print("destination area \(areaNameDestination)")
requestFarePrice()
rRideHandler.Instance.requestRide(latitude: Double(userLocation!.latitude), longitude: Double(userLocation!.longitude), destLat: Double(destLat), destLong: Double(destLong), currentAddress: self.currentAddress, destAddress: destAddress, farePrice: farePrice)
// reset the driver message
driverMessage = ""
canRequestRide(delegateCalled: true, request: nil)
else
riderCancelled()
Firebase 条目如下所示:
我需要做的是让在线 Android 驱动程序接受/拒绝请求并按照步骤操作,就好像它是 Android Rider 与 Android 驱动程序一样。
如果 Android 请求搭车并按“请求”按钮,以下是步骤:
private void requestPickupHere(String uid)
Log.e(TAG, "requestPickupHere");
DatabaseReference dbRequest = FirebaseDatabase.getInstance().getReference(Common
.request_tbl); // "RideRequests"
GeoFire mGeoFire = new GeoFire(dbRequest);
mGeoFire.setLocation(uid, new GeoLocation(Common.mLastLocation.getLatitude(),
Common.mLastLocation.getLongitude()));
// write to db
if (search_bar_destination != null)
dbRequest.child(uid).child("destination").setValue(search_bar_destination);
else if (tap_on_map_destination != null)
dbRequest.child(uid).child("destination").setValue(tap_on_map_destination);
dbRequest.child(riderId).child("status").setValue("");
if (mUserMarker.isVisible())
mUserMarker.remove();
// Add a new marker
mUserMarker = mMap.addMarker(new MarkerOptions()
.title("Pickup Here")
.snippet("")
.position(new LatLng(Common.mLastLocation.getLatitude(), Common.mLastLocation.getLongitude()))
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
mUserMarker.showInfoWindow();
btnRequest.setText("Getting your DRIVER ...");
location = getCompleteAddressString(Common.mLastLocation.getLatitude(), Common.mLastLocation.getLongitude());
Log.e(TAG, "riders location = " + location);
findDriver();
运行上述代码时,它会打开位于驱动程序应用程序中的“客户呼叫”活动,驱动程序可以在其中接受/拒绝请求。
我怎样才能让请求从 IOS Rider 发送到 Android 驱动程序,就像它在 Android 到 Android 中的工作方式一样?
【问题讨论】:
您从项目设置中为同一个项目添加了 android 和 ios 应用程序? 在 Firebase 中是的 所以如果你共享同一个数据库,无论你使用什么平台都不会有任何问题 【参考方案1】:使用不同的平台应该不是问题,当用户请求乘车时,您可以在数据库中的驱动程序下添加一个属性,例如:
DriverRides
DriverId
Name: peter
purpose: needs a ride
然后,您可以在recyclerview
中检索要为该驱动程序显示的所有请求。用户使用什么手机无关紧要,除非您希望 android 用户接受请求而 ios 用户发送请求。
您在两个平台上使用相同的数据库,因此当 ios 用户或 android 用户存储数据时,它将转到同一个位置。例如,如果用户 x 使用 iPhone,用户 y 使用三星,您将在数据库中执行以下操作:
Users
UserId1
name: userx
age: 100
UserId2
name: usery
age: 120
【讨论】:
我试图让 ios 和 android 用户都成为骑手或司机。我有 android Rider 到 ios 驱动程序工作,Ios 到 ios 工作,android 到 andtoid 工作但现在我包含的代码,不知道如何让 ios Rider 到 android 驱动程序工作 正如 Sam 在上面的评论中所说的以及我在回答中所说的那样,您使用的是数据库,我不确定您为什么要区分不同的平台并比平时做更多的工作。 ios和android用户可以将数据存储在同一个数据库中应该没有问题,应该没有平台问题.. 这是我的第一个应用程序,所以我不知道如何跨平台。不知道如何按照山姆所说的方式去做。任何示例或方法将不胜感激 当我的 ios 骑手叫车时,android 司机在线但没有收到请求 使用addValueEventListener
而不是addListenerforSingleValueEvent
以上是关于如何跨平台与Android和IOS的主要内容,如果未能解决你的问题,请参考以下文章
跪求 DES跨(C# Android IOS)三个平台通用的加解密方法
REACT NATIVE 系列教程之七统一ANDROID与IOS两个平台的程序入口&&区分平台的组件简介
如何在适用于 Android 和 iOS 的 C++ 跨平台库中正确链接 OpenCV?
Quickblox - 如何将通知推送到 Android 和 iOS 平台?