我的服务器与SpringBoot一起使用Java,我的客户是一个使用类型记录的expo本地应用程序。我真的被这个特性阻止了:,我想感觉到推送通知。我尝试了很多方法,但没有成功。
在客户端,我正在使用expo文档中描述的方法:https://docs.expo.dev/push-notifications/overview/。当我使用他们的工具发送测试通知(https://expo.dev/notifications)时,我会在我的设备上接收它们。
我没有设法从我的客户端应用程序发送通知。我试过在以太网上找到的所有东西。当我使用FirebaseMessagingService并使用来自firebase项目的服务器密钥作为标记时,我收到了SENDER_ID_MISMATCH错误。
@Service
public class FirebaseMessagingService {
    private final FirebaseMessaging firebaseMessaging;
    public FirebaseMessagingService(FirebaseMessaging firebaseMessaging) {
        this.firebaseMessaging = firebaseMessaging;
    }
    public String sendNotification(Note note, String topic) throws FirebaseMessagingException {
        Notification notification = Notification
                .builder()
                .setTitle(note.getSubject())
                .setBody(note.getContent())
                .setImage(note.getImage())
                .build();
        Message message = Message
                .builder()
                .setNotification(notification)
                .putAllData(note.getData())
                .setToken(topic)
                .build();
        return firebaseMessaging.send(message);
    }
}我也找到了expo-server-sdk-java,但是我无法成功地集成它。
有海带吗求你了?
发布于 2022-05-20 13:17:15
不知道这是不是最好的练习,但对我来说很好。
我的水壶
    <dependency>
        <groupId>io.github.jav</groupId>
        <artifactId>expo-server-sdk</artifactId>
        <version>1.1.0</version>
    </dependency>然后在java类中
private static void sendPushNotification(String token, String titulo, String mensaje, Map<String, Object> data) throws PushClientException {
    if (!PushClient.isExponentPushToken(token)) throw new Error("Token:" + token + " is not a valid token.");
    ExpoPushMessage expoPushMessage = new ExpoPushMessage();
    expoPushMessage.getTo().add(token);
    expoPushMessage.setTitle(titulo);
    expoPushMessage.setBody(mensaje);
    expoPushMessage.setData(data);
    List<ExpoPushMessage> expoPushMessages = new ArrayList<>();
    expoPushMessages.add(expoPushMessage);
    PushClient client = new PushClient();
    List<List<ExpoPushMessage>> chunks = client.chunkPushNotifications(expoPushMessages);
    List<CompletableFuture<List<ExpoPushTicket>>> messageRepliesFutures = new ArrayList<>();
    for (List<ExpoPushMessage> chunk : chunks) {
        messageRepliesFutures.add(client.sendPushNotificationsAsync(chunk));
    }
    // Wait for each completable future to finish
    List<ExpoPushTicket> allTickets = new ArrayList<>();
    for (CompletableFuture<List<ExpoPushTicket>> messageReplyFuture : messageRepliesFutures) {
        try {
            allTickets.addAll(messageReplyFuture.get());
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
    }
    List<ExpoPushMessageTicketPair<ExpoPushMessage>> zippedMessagesTickets = client.zipMessagesTickets(expoPushMessages, allTickets);
    List<ExpoPushMessageTicketPair<ExpoPushMessage>> okTicketMessages = client.filterAllSuccessfulMessages(zippedMessagesTickets);
    String okTicketMessagesString = okTicketMessages.stream().map(p -> "Title: " + p.message.getTitle() + ", Id:" + p.ticket.getId()).collect(Collectors.joining(","));
    LOGGER.info("Recieved OK ticket for " + okTicketMessages.size() + " messages: " + okTicketMessagesString);
    List<ExpoPushMessageTicketPair<ExpoPushMessage>> errorTicketMessages = client.filterAllMessagesWithError(zippedMessagesTickets);
    String errorTicketMessagesString = errorTicketMessages.stream().map(p -> "Title: " + p.message.getTitle() + ", Error: " + p.ticket.getDetails().getError()).collect(Collectors.joining(","));
    LOGGER.error("Recieved ERROR ticket for " + errorTicketMessages.size() + " messages: " + errorTicketMessagesString);
    /**
     // Countdown 30s
     int wait = 30;
     for (int i = wait; i >= 0; i--) {
     System.out.print("Waiting for " + wait + " seconds. " + i + "s\r");
     Thread.sleep(1000);
     }
     System.out.println("Fetching reciepts...");
     List<String> ticketIds = (client.getTicketIdsFromPairs(okTicketMessages));
     CompletableFuture<List<ExpoPushReceipt>> receiptFutures = client.getPushNotificationReceiptsAsync(ticketIds);
     List<ExpoPushReceipt> receipts = new ArrayList<>();
     try {
     receipts = receiptFutures.get();
     } catch (ExecutionException | InterruptedException e) {
     e.printStackTrace();
     }
     System.out.println("Recieved " + receipts.size() + " receipts:");
     for (ExpoPushReceipt reciept : receipts) {
     System.out.println("Receipt for id: " + reciept.getId() + " had status: " + reciept.getStatus());
     }
     */
}在App.js中,从反应本地项目到世博会44,我以这种方式使用世博令牌
async function registerForPushNotificationsAsync() {
  let token;
  if (isDevice) {
    const { status: existingStatus } =
      await Notifications.getPermissionsAsync();
    let finalStatus = existingStatus;
    if (existingStatus !== "granted") {
      const { status } = await Notifications.requestPermissionsAsync();
      finalStatus = status;
    }
    if (finalStatus !== "granted") {
      alert("Failed to get push token for push notification!");
      return;
    }
    token = (await Notifications.getExpoPushTokenAsync()).data;
  }
  if (Platform.OS === "android") {
    Notifications.setNotificationChannelAsync("default", {
      name: "default",
      importance: Notifications.AndroidImportance.MAX,
      vibrationPattern: [0, 250, 250, 250],
      lightColor: "#FF231F7C",
    });
  }
  return token;
}App.js效应
   useEffect(() => {
    initFirebaseApp();
    registerForPushNotificationsAsync().then(async (token) => {
      //store in some place token
    });
    // This listener is fired whenever a notification is received while the app is foregrounded
    notificationListener.current =
      Notifications.addNotificationReceivedListener(handleNotification);
    // This listener is fired whenever a user taps on or interacts with a notification (works when app is foregrounded, backgrounded, or killed)
    responseListener.current =
      Notifications.addNotificationResponseReceivedListener(
        handleNotificationResponse
      );
    return () => {
      Notifications.removeNotificationSubscription(
        notificationListener.current
      );
      Notifications.removeNotificationSubscription(responseListener.current);
    };
  }, []);App.js中的通知处理程序
  const handleNotification = (response) => {
    // console.log(response);
  };
  const handleNotificationResponse = (response) => {
    // console.log(response)
  };我希望这对你有帮助
文档
https://stackoverflow.com/questions/71298367
复制相似问题