Как я могу кроссплатформенно работать с Android и IOS

Я создал приложение как для 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 и IOS

Что мне нужно сделать из этого, так это чтобы онлайн-драйвер 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?

вы добавили приложение для Android и iOS для одного и того же проекта из настроек проекта?

Masoom Badi 09.04.2019 19:26

В базе данных да

LizG 09.04.2019 19:27

поэтому, если вы используете одну и ту же базу данных, не будет никаких проблем, независимо от того, какую платформу вы используете.

Masoom Badi 09.04.2019 19:29
0
3
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Использование разных платформ не должно быть проблемой, когда пользователь запрашивает поездку, вы можете добавить атрибут под драйвером в базу данных, например:

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

LizG 09.04.2019 19:34

Как сказал Сэм в комментарии выше, и как я сказал в своем ответе, вы используете базу данных. Я не уверен, почему вы проводите различие между разными платформами и выполняете больше работы, чем обычно. Это не должно быть проблемой, как пользователь ios, так и пользователь Android могут хранить данные в одной базе данных, не должно быть проблем с платформой.

Peter Haddad 09.04.2019 19:37

Это мое первое приложение, поэтому я не знал, как кроссплатформить. Не знаю, как сделать так, как сказал Сэм. Буду признателен за любые примеры или инструкции

LizG 09.04.2019 19:39

Когда мой водитель iOS запрашивает поездку, драйвер Android находится в сети, но не получает запрос

LizG 09.04.2019 19:49

Используйте addValueEventListener вместо addListenerforSingleValueEvent

Peter Haddad 09.04.2019 19:59

Где я могу использовать addValueEventListener? в sendRequestToDriver()?

LizG 09.04.2019 20:11

Весь код Android, который я предоставил, находится в приложении Rider, и если я отправляю запрос из приложения IOS, доступ к приложению Rider отсутствует, только к приложению Driver. Чтобы было ясно, приложения Rider и Driver для ANDROID — это два отдельных приложения. Я включил их в этот пост только для того, чтобы показать вам, как работает приложение ANDROID, так что это действительно не имеет значения, потому что в этом случае использования у меня нет никакого доступа к приложению Android Rider, только к приложению Driver. В основном все, что мне нужно знать, это то, что мне нужно сделать, чтобы драйвер Android распознал запрос от iOS Rider?

LizG 09.04.2019 20:20

Другие вопросы по теме