Я пытаюсь установить 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:
, но с моим кодом IOS это отображаетсяна БД как это:
Можно ли это сделать без установки 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) {}
});
}