android - 世博会推送通知中的警报和声音不起作用

标签 android firebase react-native push-notification expo

我正在使用 expo 开发应用程序。我想使用 expo-notifications 在我的应用程序中发送和接收推送通知。 我已经集成了世博会通知,我成功收到了通知,但没有声音和弹出警报。我总是必须向下滚动通知面板,然后才能看到通知。 这是我注册通知的代码

async function registerForPushNotificationsAsync() {
    let token;
    if (Constants.isDevice) {
        const { status: existingStatus } = await Permissions.getAsync(Permissions.NOTIFICATIONS);
        let finalStatus = existingStatus;
        if (existingStatus !== 'granted') {
            const { status } = await Permissions.askAsync(Permissions.NOTIFICATIONS);
            finalStatus = status;
        }
        if (finalStatus !== 'granted') {
            alert('Failed to get push token for push notification!');
            return;
        }
        token = (await Notifications.getExpoPushTokenAsync()).data;
        console.log(token);
    } else {
        alert('Must use physical device for Push Notifications');
    }

    if (Platform.OS === 'android') {
        Notifications.setNotificationChannelAsync('default', {
            name: 'default',
            importance: Notifications.AndroidImportance,
            vibrationPattern: [0, 250, 250, 250],
            lightColor: '#FF231F7C',
        });
    }
    return token;
}

这是我的 UseEffect,我在其中注册并监听通知

useEffect(() => {
    _gettingRestaurants();

    registerForPushNotificationsAsync().then(token => setExpoPushToken(token));

    // This listener is fired whenever a user taps on or interacts with a notification (works when app is foregrounded, backgrounded, or killed)
    Notifications.addNotificationReceivedListener((notification)=>{
        alert(notification);
    });
    Notifications.addNotificationResponseReceivedListener((response)=>{
        alert(response);
    });
    
}, [isDataFetched])

还有一件事,这些听众也没有工作。我没有从这两个警报中看到任何警报。请帮帮我。

谢谢!!!

最佳答案

要让听众工作,请尝试:

将此添加到您的 app.json

{
  "expo": {
    ...
    "android": {
      ...
      "useNextNotificationsApi": true,
    }
  }
}

起初对我不起作用,但在指定权限后,它起作用了:

{
  "expo": {
    ...
    "android": {
      ...
      "useNextNotificationsApi": true,
      "permissions": ["RECEIVE_BOOT_COMPLETED"]
    }
  }
}
      

而且,如果它不起作用(它不适用于我的主项目,但适用于另一个项目),您可以尝试使用使用 addListener 的旧版通知系统:

import * as Notifications from 'expo-notifications';
import { Notifications as Notifications2 } from 'expo';

Notifications.addNotificationReceivedListener((notification) => {
  // New Notifications. Didn't work sometimes
});

Notifications2.addListener((data) => {
  // Legacy notifications. You get a deprecation warning, but works when the new Notifications don't
});

同时检查这是否有助于您在应用程序在后台关闭时获得通知(就在通知导入之后)

Notifications.setNotificationHandler({
  handleNotification: async () => ({
    shouldShowAlert: true,
    shouldPlaySound: true,
    shouldSetBadge: false,
  }),
});

获取声音通知: 如果您希望在应用程序处于后台时收到它们,则需要使用 shouldPlaySound: true 定义 setNotificationHandler。 您还需要在通知中指定要播放的声音,如下所示:

const message = {
    to: expoPushToken,
    sound: 'default', // <== the values are 'default' (sound) or null (silent)
    title: 'Original Title',
    body: 'And here is the body!',
    data: { data: 'goes here' },
  };

我记得还有一个选项可以设置通知的优先级。玩弄这些值(value)观,直到你得到你需要的。 在此页面中搜索“优先级”:https://docs.expo.io/versions/latest/sdk/notifications/

关于android - 世博会推送通知中的警报和声音不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63010054/

相关文章:

android - 安卓手机无法写入SD卡

android - 从android中的手机内存中读取文本文件

Android 推送通知,当应用程序关闭时,我得到不同的样式

ios - textField Editing Changed react 不够快(异步调用)

node.js - 冲突的对等依赖项 : React Native for iOS

android - React Native 和 Android?

android - CollapsingToolbarLayout 有时会在下方留下空白

java - EditText 框在 Focus 事件上看起来不同

ios - 显示用户周围的多个驱动程序注释(使用数据库)

Xcode 13 仪器不是开发人员工具或在 PATH (React native) 中