Невозможно установить GeoFire с Firebase v 3.11 - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь установить GeoFire, но я использую Firebase 3.17.Если я обновлю Firebase до 4 или 5, я столкнусь с ошибками 190+.Я, наконец, исправил все ошибки (или я так думал), и когда я запустил свое приложение, оно рухнуло.

Когда я пытаюсь установить GeoFire с Firebase 3.9 и ниже, я получаю эту ошибку:

[!] CocoaPods could not find compatible versions for pod "Firebase":
In snapshot (Podfile.lock):
Firebase (= 3.17.0)

In Podfile:
Firebase

GeoFire was resolved to 1.1.0, which depends on
  Firebase (~> 2.1)

CocoaPods could not find compatible versions for pod "Firebase/Database":
In snapshot (Podfile.lock):
Firebase/Database (= 3.17.0)

In Podfile:
Firebase/Database

GeoFire was resolved to 2.0.1, which depends on
  Firebase/Database (~> 4.0)

Так что, к счастью, у меня была резервная копия и все началось заново.К сожалению, из того, что я видел, я не могу установить GeoFire, если у меня нет Firebase 4 +.

Есть ли что-нибудь еще, что я могу сделать?

Зачем мне нужен GeoFire?

У меня есть приложение на обеих платформах Android / IOS.Я пытаюсь кроссплатформенно, чтобы мое приложение работало вместе с обеими платформами.

В приложении для Android, если драйвер подключен к сети, он записывает GeoFire и lat и long в узел "DriversOnline".

Теперь с приложением IOS наездник Android не видит драйвер iOS, если GeoFire не был сохранен в базе данных Firebase.

Я установил переключатель для онлайн / офлайн состояния драйвера и, если он включен,это (рис. ниже) необходимо записать в БД, как и в Android:

android online driver

, но с моим кодом IOS это отображаетсяна БД как это:

ios online driver

Можно ли это сделать без установки geofire?

Каким другим способом я могу показать, что наездник на андроидедрайвер подключен?

Код IOS, относящийся к коммутатору:

@IBOutlet weak var `switch`: UISwitch!
@IBOutlet weak var onlineStatus: UITextField!


// online switch - viewDidLoad()

    `switch`.isOn = false
    `switch`.thumbTintColor = UIColor.black
    `switch`.tintColor = UIColor.green
    `switch`.onTintColor = UIColor.cyan

    `switch`.addTarget(self, action: #selector(isOnline(sender:)), for: .valueChanged)

    self.view.addSubview(`switch`)

// Driver online switch
@objc func isOnline(sender: UISwitch) {
    if sender.isOn {
        // Driver is ONLINE
        onlineStatus.text = "ONLINE"
        DriverOnline()

    } else {
        // Driver is NOT online
        onlineStatus.text = "OFFLINE"
        DriverOffline(child: "DriversOnline")
    }
}

func DriverOnline() {

    let cuid = FIRAuth.auth()!.currentUser?.uid

    let onlineRef = self.ref.child("iosDriver").child(cuid!)
    onlineRef.setValue(cuid)
    onlineRef.child("latitude").setValue(currentLocation.coordinate.latitude)
    onlineRef.child("longitude").setValue(currentLocation.coordinate.longitude)
}


func DriverOffline(child: String) {

    self.ref.removeValue() { error, _ in
        print(error as Any)
    }
}

Код Android для поиска драйвера:

final DatabaseReference drivers = FirebaseDatabase.getInstance().getReference(
        Common.driver_tbl);
GeoFire gfDrivers = new GeoFire(drivers);

GeoQuery geoQuery = gfDrivers.queryAtLocation(new GeoLocation(Common.mLastLocation.getLatitude(),
        Common.mLastLocation.getLongitude()), radius);
geoQuery.removeAllListeners();
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
    @Override
    public void onKeyEntered(String key, GeoLocation location) {
        // if found
        if (!Common.isDriverFound) {
            Common.isDriverFound = true;
            Common.driverId = key;
            driverId = key; // set the driverId
            writeToRequestsDB();

            btnRequest.setText("CALL DRIVER");

            pulseAnimation_CallDriver(); // animated "CallDriver" button

        } else {

        }
    }

    @Override
    public void onKeyExited(String key) { }

    @Override
    public void onKeyMoved(String key, GeoLocation location) { }

    @Override
    public void onGeoQueryReady() {
        // if still not found driver, increase distance
        if (!Common.isDriverFound && radius < LIMIT) {
            radius++;
            findDriver();


        } else if (!Common.isDriverFound) {
            Toast toast = Toast.makeText(RiderHome.this, "There are NO available drivers near you.",
                    Toast.LENGTH_LONG);
            toast.setGravity(Gravity.CENTER, 0, 0);
            toast.show();

            btnRequest.setText("REQUEST RYYDE");
            btnRequest.setEnabled(true);
        }
    }

    @Override
    public void onGeoQueryError(DatabaseError error) {}
});
}
...