Я создал приложение как для Android, так и для IOS. Я нахожусь на последнем препятствии приложения. Мне удалось заставить пользователя Android работать с пользователем IOS, тогда как у IOS было табличное представление.
Теперь я столкнулся с другой проблемой. Если «гонщик» в приложении для 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 Driver.
Ниже приведены шаги, если 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?
В базе данных да
поэтому, если вы используете одну и ту же базу данных, не будет никаких проблем, независимо от того, какую платформу вы используете.
Использование разных платформ не должно быть проблемой, когда пользователь запрашивает поездку, вы можете добавить атрибут под драйвером в базу данных, например:
DriverRides
DriverId
Name: peter
purpose: needs a ride
Затем вы можете получить все запросы, которые будут отображаться для этого драйвера в файле recyclerview
. Не имеет значения, какой телефон использует пользователь, за исключением случаев, когда вы хотите, чтобы пользователь Android принимал запросы, а пользователь ios отправлял запросы.
Вы используете одну и ту же базу данных для обеих платформ, поэтому, когда пользователь ios или пользователь android хранит данные, они будут поступать в одно и то же место. Например, если пользователь x использует iPhone, а пользователь y — Samsung, вы должны сделать в базе данных следующее:
Users
UserId1
name: userx
age: 100
UserId2
name: usery
age: 120
Я пытаюсь позволить пользователям ios и android быть гонщиками или водителями. У меня работает драйвер android rider для ios, работает Ios для ios, работает android для andtoid, но теперь с кодом, который я включил, не уверен, как заставить ios rider работать с драйвером android
Как сказал Сэм в комментарии выше, и как я сказал в своем ответе, вы используете базу данных. Я не уверен, почему вы проводите различие между разными платформами и выполняете больше работы, чем обычно. Это не должно быть проблемой, как пользователь ios, так и пользователь Android могут хранить данные в одной базе данных, не должно быть проблем с платформой.
Это мое первое приложение, поэтому я не знал, как кроссплатформить. Не знаю, как сделать так, как сказал Сэм. Буду признателен за любые примеры или инструкции
Когда мой водитель iOS запрашивает поездку, драйвер Android находится в сети, но не получает запрос
Используйте addValueEventListener
вместо addListenerforSingleValueEvent
Где я могу использовать addValueEventListener? в sendRequestToDriver()?
Весь код Android, который я предоставил, находится в приложении Rider, и если я отправляю запрос из приложения IOS, доступ к приложению Rider отсутствует, только к приложению Driver. Чтобы было ясно, приложения Rider и Driver для ANDROID — это два отдельных приложения. Я включил их в этот пост только для того, чтобы показать вам, как работает приложение ANDROID, так что это действительно не имеет значения, потому что в этом случае использования у меня нет никакого доступа к приложению Android Rider, только к приложению Driver. В основном все, что мне нужно знать, это то, что мне нужно сделать, чтобы драйвер Android распознал запрос от iOS Rider?
вы добавили приложение для Android и iOS для одного и того же проекта из настроек проекта?