- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我点击此链接创建了一个 Fire Base 应用程序 - https://blog.mestwin.net/send-push-notifications-from-spring-boot-server-side-application-using-fcm/我收到此错误 - 名称为 [DEFAULT] 的 FirebaseApp 不存在。 (对于 Spring 启动)我已在应用程序属性中添加了 JSON key 及其路径...我无法弄清楚我哪里出错了...这是我的 FCMInitializer-
import com.google.auth.oauth2.GoogleCredentials;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.io.IOException;
@Service
public class FCMInitializer {
@Value("${app.firebase-configuration-file}")
private String firebaseConfigPath;
Logger logger = LoggerFactory.getLogger(FCMInitializer.class);
@PostConstruct
public void initialize() {
try {
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(new ClassPathResource(firebaseConfigPath).getInputStream())).build();
if (FirebaseApp.getApps().isEmpty()) {
FirebaseApp.initializeApp(options);
logger.info("Firebase application has been initialized");
}
} catch (IOException e) {
logger.error(e.getMessage());
}
}
}
这是我的 FCM 服务-
import com.google.firebase.messaging.*;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.time.Duration;
import java.util.Map;
import java.util.concurrent.ExecutionException;
//import org.slf4j.LoggerFactory;
//import com.highpeak.av.pushnotification.dto.PushNotificationRequest;
@Slf4j
@Service
public class FCMService {
private Logger logger = LoggerFactory.getLogger(FCMService.class);
public void sendMessage(Map<String, String> data, PushNotificationRequest request)
throws InterruptedException, ExecutionException {
Message message = getPreconfiguredMessageWithData(data, request);
String response = sendAndGetResponse(message);
log.info("Sent message with data. Topic: " + request.getTopic() + ", " + response);
}
private Message getPreconfiguredMessageWithData(Map<String, String> data, PushNotificationRequest request) {
return getPreconfiguredMessageBuilder(request).putAllData(data).setTopic(request.getTopic())
.build();
}
public void sendMessageWithoutData(PushNotificationRequest request)
throws InterruptedException, ExecutionException {
Message message = getPreconfiguredMessageWithoutData(request);
String response = sendAndGetResponse(message);
log.info("Sent message without data. Topic: " + request.getTopic() + ", " + response);
}
private String sendAndGetResponse(Message message) throws InterruptedException, ExecutionException {
return FirebaseMessaging.getInstance().sendAsync(message).get();
}
private AndroidConfig getAndroidConfig(String topic) {
return AndroidConfig.builder()
.setTtl(Duration.ofMinutes(2).toMillis()).setCollapseKey(topic)
.setPriority(AndroidConfig.Priority.HIGH)
.setNotification(AndroidNotification.builder().setSound(NotificationParameter.SOUND.getValue())
.setColor(NotificationParameter.COLOR.getValue()).setTag(topic).build()).build();
}
private ApnsConfig getApnsConfig(String topic) {
return ApnsConfig.builder()
.setAps(Aps.builder().setCategory(topic).setThreadId(topic).build()).build();
}
private Message getPreconfiguredMessageWithoutData(PushNotificationRequest request) {
return getPreconfiguredMessageBuilder(request).setTopic(request.getTopic())
.build();
}
private Message.Builder getPreconfiguredMessageBuilder(PushNotificationRequest request) {
AndroidConfig androidConfig = getAndroidConfig(request.getTopic());
ApnsConfig apnsConfig = getApnsConfig(request.getTopic());
return Message.builder()
.setApnsConfig(apnsConfig).setAndroidConfig(androidConfig).setNotification(
new Notification(request.getTitle(), request.getMessage()));
}
public void sendMessageToToken(PushNotificationRequest request)
throws InterruptedException, ExecutionException {
Message message = getPreconfiguredMessageToToken(request);
String response = sendAndGetResponse(message);
log.info("Sent message to token. Device token: " + request.getToken() + ", " + response);
}
private Message getPreconfiguredMessageToToken(PushNotificationRequest request) {
return getPreconfiguredMessageBuilder(request).setToken(request.getToken())
.build();
}
}
这是我的 PushNotification 服务 -
package com.example.MyFirstPushNotificationService.PushNotificationsDemo;
import com.google.api.client.util.Value;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;
@Service
public class PushNotificationService {
@Value("#{${app.notifications.defaults}}")
private Map<String, String> defaults;
private Logger logger = LoggerFactory.getLogger(PushNotificationService.class);
private FCMService fcmService;
public PushNotificationService(FCMService fcmService) {
this.fcmService = fcmService;
}
@Scheduled(initialDelay = 60000, fixedDelay = 60000)
public void sendSamplePushNotification() {
try {
fcmService.sendMessageWithoutData(getSamplePushNotificationRequest());
} catch (InterruptedException | ExecutionException e) {
logger.error(e.getMessage());
}
}
public void sendPushNotification(PushNotificationRequest request) {
try {
fcmService.sendMessage(getSamplePayloadData(), request);
} catch (InterruptedException | ExecutionException e) {
logger.error(e.getMessage());
}
}
public void sendPushNotificationWithoutData(PushNotificationRequest request) {
try {
fcmService.sendMessageWithoutData(request);
} catch (InterruptedException | ExecutionException e) {
logger.error(e.getMessage());
}
}
public void sendPushNotificationToToken(PushNotificationRequest request) {
try {
fcmService.sendMessageToToken(request);
} catch (InterruptedException | ExecutionException e) {
logger.error(e.getMessage());
}
}
private Map<String, String> getSamplePayloadData() {
Map<String, String> pushData = new HashMap<>();
pushData.put("messageId", defaults.get("payloadMessageId"));
pushData.put("text", defaults.get("payloadData") + " " + LocalDateTime.now());
return pushData;
}
private PushNotificationRequest getSamplePushNotificationRequest() {
PushNotificationRequest request = new PushNotificationRequest(defaults.get("title"),
defaults.get("message"),
defaults.get("topic"));
return request;
}
}
这是我的 PushNotificationController-
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PushNotificationController {
private PushNotificationService pushNotificationService;
public PushNotificationController(PushNotificationService pushNotificationService) {
this.pushNotificationService = pushNotificationService;
}
@PostMapping("/notification/topic")
public ResponseEntity sendNotification(@RequestBody PushNotificationRequest request) {
pushNotificationService.sendPushNotificationWithoutData(request);
return new ResponseEntity<>(new PushNotificationResponse(HttpStatus.OK.value(), "Notification has been sent."), HttpStatus.OK);
}
@PostMapping("/notification/token")
public ResponseEntity sendTokenNotification(@RequestBody PushNotificationRequest request) {
pushNotificationService.sendPushNotificationToToken(request);
return new ResponseEntity<>(new PushNotificationResponse(HttpStatus.OK.value(), "Notification has been sent."), HttpStatus.OK);
}
@PostMapping("/notification/data")
public ResponseEntity sendDataNotification(@RequestBody PushNotificationRequest request) {
pushNotificationService.sendPushNotification(request);
return new ResponseEntity<>(new PushNotificationResponse(HttpStatus.OK.value(), "Notification has been sent."), HttpStatus.OK);
}
@GetMapping("/notification")
public ResponseEntity sendSampleNotification() {
pushNotificationService.sendSamplePushNotification();
return new ResponseEntity<>(new PushNotificationResponse(HttpStatus.OK.value(), "Notification has been sent."), HttpStatus.OK);
}
}
这是我的通知参数-
public enum NotificationParameter {
SOUND("default"),
COLOR("#FFFF00");
private String value;
NotificationParameter(String value) {
this.value = value;
}
public String getValue() {
return this.value;
}
}
这是我的 PushNotificationRequest-
public class PushNotificationRequest {
private String title;
private String message;
private String topic;
private String token;
public PushNotificationRequest() {
}
public PushNotificationRequest(String title, String messageBody, String topicName) {
this.title = title;
this.message = messageBody;
this.topic = topicName;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getTopic() {
return topic;
}
public void setTopic(String topic) {
this.topic = topic;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
}
这是我的推送通知响应-
package com.example.MyFirstPushNotificationService.PushNotificationsDemo;
public class PushNotificationResponse {
private int status;
private String message;
public PushNotificationResponse() {
}
public PushNotificationResponse(int status, String message) {
this.status = status;
this.message = message;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
这是我的应用程序属性:
app.firebase-configuration-file=google/push-notifications-example-firebase-adminsdk.json
app.notifications.defaults={topic: 'common', title: 'Common topic - Hello', message: 'Sending test message \uD83D\uDE42', token: 'ss22t03wz208eg:APA2idkkow223FE_0v5yHxqCLTyxAQafj6nWaqi4QzwZTW004q1PUux63UsFN', payloadMessageId: '123', payloadData: 'Hello. This is payload content.'}
请原谅我,因为我仍然是 Firebase 的初学者......我没有弄错我的地方......我认为它在应用程序属性中......而且我得到了错误 at-FirebaseMessaging.getInstance().sendAsync(message).get(); FCMService 类。提前致谢
最佳答案
我遇到了同样的错误,尝试调试 FCMInitializer.java 中的初始化()方法,在我的例子中,它有错误的 JSON 文件路径,在提供正确的路径后,问题得到解决。
关于java - 名称为 [DEFAULT] 的 FirebaseApp 不存在。 (对于 Spring 启动),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60705522/
我正在创建一个 Android 应用程序,目前正在尝试使用 Firebase 实现用户身份验证。据我所知,我的应用已连接到我的 Firebase 服务器。 我在尝试通过按下按钮从 SignIn Act
默认 FirebaseApp 在此过程中未初始化。确保首先调用 FirebaseApp.initializeApp(Context)。 我尝试了很多方法,但无法在设备中获取通知。 我也尝试过下面的事情
在更改了一些 gradle 依赖项后,我今天遇到了这个 fatal error 。即使我试图将 gradle 依赖恢复到原来的状态,我仍然在这一行收到错误: class MainActivity :
我正在尝试使用 Firebase 存储下载图像。我写了下面的代码 主 Activity .java public class MainActivity extends AppCompatActivit
我正在使用 kotlin 制作 Firebase 身份验证注册页面,但在我运行该应用程序时出现运行时错误。请看第 3 行和第 14 行我不知道是什么问题。 我没有附上主要代码,如果需要附上代码,请通知
我正在开发一个包含鸟类学应用程序的应用程序,并且我使用 Firabase 作为 BBDD。 我的问题是我收到以下错误:'java.lang.IllegalStateException:默认 Fireb
在我的 android 应用程序中,编译应用程序时出错。我在最新的 android studio 中工作,并使用 Firebase UI Auth 和 Firebase Database,所有版本在
在我将带有 fabric 集成的应用程序更改为 firebase Crashlytics 后,该应用程序开始在 HMS 设备上崩溃并给出如下错误。我在使用 Google Play 设备时没有遇到任何问
我尝试使用 Firebase 进行分析,但当我在 AppDelegate 的 didFinishLaunchingWithOptions 中添加 FirebaseApp.configure() 时。
尝试使用适用于 Android 的 firebase 库,遵循 firebase 文档中的所有步骤,当我应用说明时在 logcat 中显示我 FirebaseApp initialization un
03-02 21:03:03.087 6253-6253/ D/FirebaseApp: com.google.firebase.auth.FirebaseAuth is not linked. Sk
我的项目突然停止正常运行 - 它无法初始化 FirebaseApp。 我一直在使用老式的 Firebase 配置 - 直接来自 Firebase 控制台的 Google-Services 文件。我切换
我正在尝试删除 secondaryApp 代码,因为我想阻止函数 firebaseAuth.createUserWithEmailAndPassword(email,password) 在用户创建后自
我正在开发一个 iOS 项目,该项目使用 Firebase 进行分析、crashlytics 和远程配置获取。对于依赖管理,我使用 cocoapods 并且项目中的 Firebase 的当前版本是最新
我正在我的 macOS Catalina 10.15.6 上使用 Xcode 创建一个社交应用程序(出于个人兴趣),并且在真正做某事之前面临大量配置问题。 我已经陷入这个 swift 编译器错误 2
文档暗示,如果配置的任何部分失败,它都会引发异常,但似乎不可能实际捕获异常(Swift 4)。当然,不能将语句包装在 do..catch block 中。如果失败,我的应用是否注定会崩溃或继续尝试(但
我看到一些异常消息 Default FirebaseApp is not initialized in this process com.armoured。确保先调用 FirebaseApp.init
我正在尝试从 gcm 切换到 fcm。我已按照 gcm 到 fcm 迁移指南中详述的步骤进行操作,尽管 FirebaseApp 没有初始化。 我已经确定了几个可能的问题,但是 codenameone
我正在尝试使用 Robolectric 运行测试,它与 Firebase 集成。我有一个项目 MyProject - Test,我将使用它在数据库的真实实例中运行测试。 问题是,在测试前运行清理时,出
我想在我的 Android 应用程序中实现 Firebase-Messaging 插件。我从 github 中的“quickstart-android-master/messaging”示例开始:ht
我是一名优秀的程序员,十分优秀!