Firebase Device Store (iOS SDK)
自动将设备信息和FCM令牌信息存储到云Firestore中,用于Firebase Auth用户。
该库是一个概念证明,并且非常处于开发中。
安装
将 FirebaseDeviceStore
添加到您的 Podfile
pod 'FirebaseDeviceStore'
Objective-C
请确保在 Podfile
中启用了 use_frameworks!
示例用法
Swift
导入库
import FirebaseDeviceStore
初始化库
let deviceStore = FirebaseDeviceStore.init(app: FirebaseApp.app()!);
// Subscribe to the device store and ensure that appropriate notification permissions are granted
deviceStore.subscribe { (error) in
// Handle permission errors here
}
Objective-C
导入库
#import "FirebaseDeviceStore-Swift.h"
初始化库
FirebaseDeviceStore *deviceStore = [[FirebaseDeviceStore alloc] initWithApp:[FIRApp defaultApp]];
// Subscribe to the device store and ensure that appropriate notification permissions are granted
[deviceStore subscribe:^(NSError * _Nullable error) {
// Handle permission errors here
}];
文档
Firebase设备存储自动存储Firebase Auth用户的设备和FCM信息到Cloud Firestore。
数据模型
为每个已登录用户在Cloud Firestore集合中创建一个文档
/user-devices
- userId1: {},
- userId2: {},
该文档的结构如下
{
devices: {
deviceId1: Device,
deviceId2: Device,
...
},
userId: string,
}
一个Device
对象包含以下内容
{
deviceId: string, // A UUID for the device
fcmToken: string, // The FCM token
name: string, // The name of the device (e.g. 'Bob's iPhone')
os: string, // The OS of the device
type: 'iOS'
}
API (Swift)
FirebaseDeviceStore.init(app: FIRApp, collectionPath: String?)
创建一个新的DeviceStore。
参数
app
:FirebaseApp
(可选) 要使用的Firebase App。默认使用默认的Firebase App。collectionPath
: (可选)string
设备应存储的Cloud Firestore集合。默认为user-devices
。
返回一个 FirebaseDeviceStore
。
signOut(completion: (Error?) -> Void): void
向DeviceStore指示用户将要注销,并移除当前设备令牌。
使用onAuthStateChanged
无法自动完成此操作,因为在这一点上用户已经注销。这意味着Cloud Firestore安全规则将阻止数据库删除,因为它们已经没有删除令牌的正确用户权限。
参数
completion
:(Error?) -> Void
一个回调处理程序,在注销不成功时将带有Error
调用,或者如果没有错误,则为nil
。
subscribe(completion: (Error?) -> Void): void
将设备存储订阅到Firebase App。这将
- 请求必要的通知权限,如果尚未授予
- 订阅到Firebase Auth并监听身份验证状态的变化
- 订阅到Firebase Cloud Messaging并监听FCM令牌的变化
- 自动将设备和FCM令牌信息存储在您指定的Cloud Firestore集合中
参数
completion
:(Error?) -> Void
当订阅失败时,将带有Error
调用回调处理程序,或者如果没有错误,则为nil
。
unsubscribe(): void
从Firebase App取消设备存储的订阅。
API (Objective-C)
[FirebaseDeviceStore initWithApp: FIRApp collectionPath: NSString]
创建一个新的DeviceStore。
参数
app
:FirebaseApp
(可选) 要使用的Firebase App。默认使用默认的Firebase App。collectionPath
: (可选)string
设备应存储的Cloud Firestore集合。默认为user-devices
。
返回一个 FirebaseDeviceStore
。
signOut:(void (^ _Nonnull)(NSError * _Nullable))completion: void
向DeviceStore指示用户将要注销,并移除当前设备令牌。
使用onAuthStateChanged
无法自动完成此操作,因为在这一点上用户已经注销。这意味着Cloud Firestore安全规则将阻止数据库删除,因为它们已经没有删除令牌的正确用户权限。
参数
completion
:(void (^ _Nonnull)(NSError * _Nullable))
一个回调处理程序,如果注销失败则返回一个Error
,否则返回nil
subscribe:(void (^ _Nonnull)(NSError * _Nullable))completion: void
将设备存储订阅到Firebase App。这将
- 请求必要的通知权限,如果尚未授予
- 订阅到Firebase Auth并监听身份验证状态的变化
- 订阅到Firebase Cloud Messaging并监听FCM令牌的变化
- 自动将设备和FCM令牌信息存储在您指定的Cloud Firestore集合中
参数
completion
:(void (^)(NSError * _Nullable))
一个回调处理程序,如果订阅失败则返回一个Error
,否则返回nil
unsubscribe: void
从Firebase App取消设备存储的订阅。
安全规则
您需要为您的 Cloud Firestore 集合添加以下安全规则
service cloud.firestore {
match /databases/{database}/documents {
// Add this rule, replacing `user-devices` with the collection path you would like to use:
match /user-devices/{userId} {
allow create, read, update, delete: if request.auth.uid == userId;
}
}
}