小编Aks*_*ain的帖子

Firebase - 创建一个临时用户,直到用户注册

我有一个用例,用户 A 可以说用户 B 从用户 A 那里借了一些钱,类似于 Splitwise 之类的应用程序。

我正在使用 firestore 来存储数据。在这种特殊情况下,我会将其作为文档存储在“交易”集合中,该集合将具有以下字段:

数量:20
fromUser:用户 A 的
uid toUser:用户 B 的 uid

这里的问题是用户 B 尚不存在,因此用户 B 没有 uid。我想要做的是为用户 B 创建一个临时用户,其电子邮件地址将生成一个 uid。稍后当用户 B 在应用程序上注册时,同一个用户将升级为用户 B 使用的任何身份验证提供程序的永久用户。

在搜索时,我遇到了 - https://www.freecodecamp.org/news/heres-what-i-wish-i-knew-before-i-started-using-firebase-9110d393e193/

其中提到这可以通过现在折旧的 firebase 邀请来实现。那么,现在还有其他方法可以实现这种行为吗?

firebase firebase-authentication firebase-admin

6
推荐指数
2
解决办法
1061
查看次数

Android 12 启动画面条件启动画面

我浏览了有关 Android 12 启动屏幕以及迁移现有启动屏幕的文档,但它没有明确提及如何根据条件选择启动屏幕。

具体来说,我之前添加了用户是否已登录的检查:

class SplashScreenActivity: AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash_screen)

        if(viewModel.isUserSignedIn()) {
            navigateToMain()
        } else {
            navigateToAuth()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

其中SplashScreenActivity被标记为默认启动活动。当我保持这样时,Android studio 会发出警告 - The application should not provide its own launch screen

我按照指南修改了它并setContentView从活动中删除并调用了installSplashScreen

class SplashScreenActivity: AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        installSplashScreen()

        if(viewModel.isUserSignedIn()) {
            navigateToMain()
        } else {
            navigateToAuth()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在模拟器上运行时,它似乎按预期工作,但 Android Studio 继续发出相同的警告。

这是迁移到 Android 12 初始屏幕的正确方法吗?如果是,为什么 …

android splash-screen kotlin android-studio

5
推荐指数
1
解决办法
1820
查看次数

FieldValue.arrayRemove() 不适用于字符串数组

我将用户的 firebase 云消息传递注册令牌存储在 firestore 用户集合中,每当我发送通知时,我都会删除未使用的令牌。我正在使用 admin sdk 在云功能上执行此操作。我正在使用的代码是-

let removeRegistrationTokens = async function (userId: string, tokens: string[]) {
   await db.collection('users')
        .doc(userId)
        .update("tokens",admin.firestore.FieldValue.arrayRemove(tokens)
        .catch(logError)
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,并且没有从数组中删除任何值。我检查了标记数组,传递的值是正确的。如果我简单地将代码更改为

.update("tokens",admin.firestore.FieldValue.arrayRemove(tokens[0])
Run Code Online (Sandbox Code Playgroud)

这是从 firestore 中的 tokens 数组中删除数组中的第一个元素。根据文档,它应该删除数组中传递给它的所有元素。

如果您的文档包含数组字段,您可以使用 arrayUnion() 和 arrayRemove() 来添加和删除元素。arrayUnion() 将元素添加到数组中,但仅添加尚未存在的元素。arrayRemove() 删除每个给定元素的所有实例。

有什么帮助可以解释为什么会发生这种情况吗?

javascript firebase google-cloud-firestore

3
推荐指数
1
解决办法
2653
查看次数

使用XAML的UWP应用程序中的垂直文本

我想在border元素中垂直写入文本.如图所示.

垂直文本

我已尝试使用此代码使用RenderTransform

<Border Width="80"
        Background="Teal">
  <TextBlock Text="CATEGORIES"
             Foreground="White"
             FontFamily="Segoe UI Black"
             FontSize="30">
    <TextBlock.RenderTransform>
      <RotateTransform Angle="-90" />
    </TextBlock.RenderTransform>
  </TextBlock>
</Border>
Run Code Online (Sandbox Code Playgroud)

这会垂直旋转文本,但TextBlock会在Transform之前获取高度和宽度的旧值,并且不会完全显示文本.因此,文本在80像素(边框元素的宽度)之后被切断.虽然搜索我发现使用LayoutTransform可以解决问题,但它在UWP应用程序中不可用.如何在UWP XAML中执行此操作?

xaml win-universal-app

1
推荐指数
1
解决办法
1792
查看次数