FirebaseDeviceStore 0.1.0

FirebaseDeviceStore 0.1.0

Chris Bianca维护。



 
依赖
Firebase/Core>= 0
Firebase/Auth>= 0
Firebase/Firestore>= 0
Firebase/Messaging>= 0
 

  • 作者
  • Chris Bianca

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。这将

  1. 请求必要的通知权限,如果尚未授予
  2. 订阅到Firebase Auth并监听身份验证状态的变化
  3. 订阅到Firebase Cloud Messaging并监听FCM令牌的变化
  4. 自动将设备和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。这将

  1. 请求必要的通知权限,如果尚未授予
  2. 订阅到Firebase Auth并监听身份验证状态的变化
  3. 订阅到Firebase Cloud Messaging并监听FCM令牌的变化
  4. 自动将设备和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;
    }
  }
}