在几个弹出的应用程序中,使用裸露的工作流程无法获得expo通知。在进行故障排除时,我使用一个干净的新项目测试了设置–这些是我采取的步骤:
npm install react-native-unimodules
npx pod-install
完成这些步骤后,我一次(https://github.com/brentvatne/push-notif-example/blob/f3ad8240166c42863c23a4edff40c2cbae521e18/App.tsx#L5-L13)发布了该应用程序,因此expo知道了它,并添加了带有expo凭证:manager的APN按钮。列出上传的密钥时,它显示如下:
Push Notifications Key - Key ID: M9DFYLY3Q6
Apple Team ID: MAMAYY5H8H, Apple Team Name: entrecode GmbH (Company/Organization)
not used by any apps
我不确定为什么会说“没有被任何应用程序使用”。是否有人遇到过类似的问题,并且知道如何解决?裸露的应用程序甚至有问题吗?
无论如何,我在App.js中添加:
async function registerForPushNotificationsAsync() {
let token;
if (Constants.isDevice) {
console.log('get push permission');
const { status: existingStatus } = await Permissions.getAsync(Permissions.NOTIFICATIONS);
let finalStatus = existingStatus;
if (existingStatus !== 'granted') {
console.log(`ask push permission: ${existingStatus}`);
const { status } = await Permissions.askAsync(Permissions.NOTIFICATIONS).catch((err) => {
console.error(`Error in ask permission: ${err.message}`);
throw err;
});
finalStatus = status;
}
if (finalStatus !== 'granted') {
alert('Failed to get push token for push notification!');
return;
}
// await Notifications.requestPermissionsAsync();
console.log('getting expo push token');
token = (
await Notifications.getExpoPushTokenAsync({
experienceId,
development: true,
}).catch((err) => {
console.error(`Error in get expo token: ${err.message}`);
throw err;
})
).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.MAX,
vibrationPattern: [0, 250, 250, 250],
lightColor: '#FF231F7C',
});
}
return token;
}
我现在面临的问题是在我的iOS设备上授予推送权限后,Notifications.getExpoPushTokenAsync()
(我在有无开发标志的情况下进行了测试)在console.log('getting expo push token');
之后停止了。它既不解决也不拒绝。我在博览会论坛上找到的其他解决方案对我不起作用。
如果这很重要:我正在使用通过电缆连接的物理设备,并使用Xcode启动应用。
有没有人做到这一点并且可以分享成功集成的一些细节?
最好, 康