将 Geofire 与 Firebase 数据集成
Integrating Geofire with Firebase Data
我正在尝试将 Geofire 集成到 Firebase Objective-C 应用程序中,但我不确定如何设置 Geofire 节点来观察我的 Firebase 存储库。以下是 Geofire 启动指南的建议:
"To create a new GeoFire instance you need to attach it to a Firebase database reference"
我的问题是:"attach it to a Firebase database reference" 是什么意思?
在我的代码中,我希望 Geofire 观察这个 Firebase 位置:
@"https://myApp.firebaseio.com/ios/languages"
以下是 "languages" 节点在 Firebase 中的样子:
languages
--Arabic
----FakeUser1
------latitude: "38.8438"
------longitude: "-77.62432"
----FakeUser2
------latitude: "38.6438"
------longitude: "-77.32432"
--English
----FakeUser1
------latitude: "38.3438"
------longitude: "-77.92432"
----FakeUser2
------latitude: "38.2438"
------longitude: "-77.02432"
我想知道的是如何让Geofire观察并存储每个假用户的位置。每当我将用户读入 /languages/arabic 或 /languages/english 引用时,我是否创建一个唯一的 Geofire 节点并将用户读入其中?或者 Geofire 会观察预先存在的节点——即。这样的事情会成功吗:
Firebase *geofireRef = [[Firebase alloc] initWithUrl:@"https://myApp.firebaseio.com/ios/languages"];
GeoFire *geoFire = [[GeoFire alloc] initWithFirebaseRef:geofireRef];
我想通了。您创建一个唯一的 Geofire 节点来镜像您要监控的节点。
我用的是这个结构,感觉效果不错。
app-id
-> geodata
--> geofire
---> key
----> g: <geohash>
-----> l:
-------> 0: Lat
-------> 1: Lon
--> other
---> key
----> <otherhash object>
保存数据时,您将使用以下方式单独保存 geofire 数据:
mDatabase = FirebaseDatabase.getInstance().getReference("geodata");
geoFire = new GeoFire(mDatabase.child("geofire"));
geoFire.setLocation(people.key, new GeoLocation(people.Lat, people.Lon));
然后您将数据单独保存在 firebase 中:
mDatabase = FirebaseDatabase.getInstance().getReference("geodata");
mDatabase.child("other").child(people.key).setValue(people);
People
是我的自定义 class 对象,它将使用相同的密钥在 firebase 中序列化。
希望这对您有所帮助。 :)
我正在尝试将 Geofire 集成到 Firebase Objective-C 应用程序中,但我不确定如何设置 Geofire 节点来观察我的 Firebase 存储库。以下是 Geofire 启动指南的建议:
"To create a new GeoFire instance you need to attach it to a Firebase database reference"
我的问题是:"attach it to a Firebase database reference" 是什么意思?
在我的代码中,我希望 Geofire 观察这个 Firebase 位置:
@"https://myApp.firebaseio.com/ios/languages"
以下是 "languages" 节点在 Firebase 中的样子:
languages
--Arabic
----FakeUser1
------latitude: "38.8438"
------longitude: "-77.62432"
----FakeUser2
------latitude: "38.6438"
------longitude: "-77.32432"
--English
----FakeUser1
------latitude: "38.3438"
------longitude: "-77.92432"
----FakeUser2
------latitude: "38.2438"
------longitude: "-77.02432"
我想知道的是如何让Geofire观察并存储每个假用户的位置。每当我将用户读入 /languages/arabic 或 /languages/english 引用时,我是否创建一个唯一的 Geofire 节点并将用户读入其中?或者 Geofire 会观察预先存在的节点——即。这样的事情会成功吗:
Firebase *geofireRef = [[Firebase alloc] initWithUrl:@"https://myApp.firebaseio.com/ios/languages"];
GeoFire *geoFire = [[GeoFire alloc] initWithFirebaseRef:geofireRef];
我想通了。您创建一个唯一的 Geofire 节点来镜像您要监控的节点。
我用的是这个结构,感觉效果不错。
app-id
-> geodata
--> geofire
---> key
----> g: <geohash>
-----> l:
-------> 0: Lat
-------> 1: Lon
--> other
---> key
----> <otherhash object>
保存数据时,您将使用以下方式单独保存 geofire 数据:
mDatabase = FirebaseDatabase.getInstance().getReference("geodata");
geoFire = new GeoFire(mDatabase.child("geofire"));
geoFire.setLocation(people.key, new GeoLocation(people.Lat, people.Lon));
然后您将数据单独保存在 firebase 中:
mDatabase = FirebaseDatabase.getInstance().getReference("geodata");
mDatabase.child("other").child(people.key).setValue(people);
People
是我的自定义 class 对象,它将使用相同的密钥在 firebase 中序列化。
希望这对您有所帮助。 :)