gpt4 book ai didi

java - 你如何使用谷歌云平台?

转载 作者:行者123 更新时间:2023-11-29 19:11:11 24 4
gpt4 key购买 nike

我有一个 Android 应用程序。它使用 Firebase。我想根据 Firebase 数据库中的数据向用户发送通知。

我认为这是一个非常常见的用例,但几乎所有教程都只是关于使用 Firebase 控制台手动发送通知。我显然需要一个服务器来定期查看 Firebase 并触发这些通知。

我终于找到了有关如何执行此操作的教程:https://cloud.google.com/solutions/mobile/firebase-app-engine-android-studio(该示例发送了一封电子邮件,但这足以让我让 Firebase 和 GCP 相互交谈)

但是那里提供的代码有错误。特别是这里的这一点会导致空指针异常:

    FirebaseOptions options = new FirebaseOptions.Builder()
.setServiceAccount("/WEB-INF/[my private key file].json")
.setDatabaseUrl("https://[my firebase account].firebaseio.com/")
.build();

我在此处收到 500 服务器错误:https://[my project ID].appspot.com/send-email

https://console.cloud.google.com 我得到这个:NullPointerException at setServiceAccount (FirebaseOptions.java:73)。日志清楚地表明问题是我上面所说的。

堆栈跟踪:

java.lang.NullPointerException
at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkNotNull (Preconditions.java:213)
at com.google.api.client.util.Preconditions.checkNotNull (Preconditions.java:127)
at com.google.api.client.util.ByteStreams.copy (ByteStreams.java:46)
at com.google.firebase.FirebaseOptions$Builder.setServiceAccount (FirebaseOptions.java:73)
at digital.simply.goalsandtasks.backend.MyServlet.doGet (MyServlet.java:88)
at javax.servlet.http.HttpServlet.service (HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service (HttpServlet.java:717)
...

所以我尝试了一些东西。

首先,我将有问题的 Java 代码更改为:

    InputStream in = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("/WEB-INF/[my private key file].json");

FirebaseOptions options = new FirebaseOptions.Builder()
.setServiceAccount(in)
.setDatabaseUrl("https://[my firebase account].firebaseio.com/")
.build();

但我仍然在 .setServiceAccount(... 行遇到错误。

其次,本教程还说要通过将 appengine-web.xml 文件更新为以下内容来手动缩放项目:

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>myApplicationId</application>
<version>1</version>
<threadsafe>true</threadsafe>
<manual-scaling>
<instances>1</instances>
</manual-scaling>
<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/logging.properties" />
</system-properties>
</appengine-web-app>

不清楚我应该这样做,但我将“myApplicationId”更改为我的实际 GCP 项目 ID。

似乎都没有这样做。关于如何修复空指针异常的任何想法?

最佳答案

除了教程之外,我还必须做一些事情...

1) 将我的项目名称更改为没有空格。
本教程提供的代码不适用于带空格的 json 私钥文件名。名称来自项目名称。我所有处理文件名字符串的尝试都失败了。也许更好的 Java 开发人员可以找到方法。因此,我将现有项目转储到 GCP 控制台中并创建了一个新项目。将应用程序连接到那个。

然后将那部分 Java 改回教程中的原始版本。像这样:

FirebaseOptions options = new FirebaseOptions.Builder()
.setServiceAccount("/WEB-INF/[my private key file].json")
.setDatabaseUrl("https://[my firebase account].firebaseio.com/")
.build();

2) 将自己添加为授权发件人
在控制台中 [ https://console.cloud.google.com/]转到设置,然后将我自己的真实 Google 帐户添加为电子邮件 API 授权发件人。然后用上述电子邮件地址替换 reminder@[FIREBASE_PROJECT_ID].appspotmail.com

仍在尝试弄清楚如何使该别名成为“reminder@mydomain.com”之类的别名。

3) 最后更新代码。
看来您可以使用相同的版本点击 Build > Deploy Module to App Engine... 来上传更新。

logging.properties 中,我更改了这一行:

 # Set the default logging level for all loggers to WARNING
.level = INFO

然后我可以在这里阅读我自己的日志:
https://console.cloud.google.com/logs/
这很有帮助。

无论如何。我希望有一天我可以让其他一些初学者免于陷入疯狂的尝试中。

本教程的名称仍然是:
在 Android 应用程序中使用 Firebase 和 App Engine 标准环境
https://cloud.google.com/solutions/mobile/firebase-app-engine-android-studio

关于java - 你如何使用谷歌云平台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45257302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com