android - 警报和声音在博览会推送通知中不起作用
问题描述
我正在使用 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"]
}
}
}
而且,如果它不起作用(它不是针对我的 Main 项目,而是针对另一个项目),您可以尝试使用使用的遗留通知系统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,
}),
});
要获得声音通知:
如果您希望在应用程序处于后台时收到通知,您需要定义setNotificationHandler
with shouldPlaySound: true
。您还需要在通知中指定要播放的声音,如下所示:
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' },
};
我记得还有一个选项可以设置通知的优先级。使用这些价值观,直到你得到你需要的东西。在此页面中搜索“优先级”:https ://docs.expo.io/versions/latest/sdk/notifications/
推荐阅读
- python - 删除每种类型的python变量
- ruby-on-rails - Bundler 正在弃用捆绑控制台以支持 bin/console。谁能更清楚地说明 bin/console 应该如何工作?
- python - 从自己的模块导入 Python
- reactjs - React 中 Material UI 组件渲染内容的问题
- authentication - Ionic 6 上的身份验证服务出错
- ansible - 如何在 ansible wait_for 模块中打印成功和失败的调试消息以测试防火墙。?
- arrays - 如何在空手道中为 json 数组设置动态值
- python - Azure 函数 Python | 将带有属性的 EventData 消息发送到事件中心输出
- angular - NGXS 调度未调用操作
- google-chrome - WebDriver 问题,我无法打开谷歌浏览器