我已经在我的项目上设置了react native onesignal,以使用onesignal实现推送通知。
从Xcode 11.4 Beta开始,可以在iOS模拟器上测试推送通知。我创建了JSON格式的apns文件来测试模拟器上的推送通知,它运行得很好。
但是,我如何模拟OneSignal推送通知?
我关注了OneSignal文档,想接收从OneSignal Dashboard发送的推送通知。
以下是我在App.tsx文件中实现的内容。
const initializeOneSignal = () => {
OneSignal.setLogLevel(6, 0);
OneSignal.init("MY_ONESIGNAL_APP_ID", {
kOSSettingsKeyAutoPrompt: false,
kOSSettingsKeyInAppLaunchURL: false,
kOSSettingsKeyInFocusDisplayOption: 2,
});
OneSignal.inFocusDisplaying(2);
OneSignal.promptForPushNotificationsWithUserResponse(myiOSPromptCallback);
OneSignal.addEventListener('received', onPNReceived);
OneSignal.addEventListener('opened', onPNOpened);
OneSignal.addEventListener('ids', onPNIds);
};
useEffect(() => {
initializeOneSignal();
return () => {
OneSignal.removeEventListener('received', onPNReceived);
OneSignal.removeEventListener('opened', onPNOpened);
OneSignal.removeEventListener('ids', onPNIds);
};
}, []);
const onPNReceived = notification => {
console.log('Notification received: ', notification);
};
const onPNOpened = openResult => {
console.log('Message: ', openResult.notification.payload.body);
console.log('Data: ', openResult.notification.payload.additionalData);
console.log('isActive: ', openResult.notification.isAppInFocus);
console.log('openResult: ', openResult);
};
const onPNIds = device => {
console.log('Device info: ', device);
};
const myiOSPromptCallback = permissions => {
console.log('Permissions: ', permissions);
};
当我从OneSignal仪表板发送推送通知时,我看不到任何记录的消息。
我需要在apns文件中做一些技巧吗?
如有任何帮助,我们将不胜感激。
您可以在Medium上查看这篇文章,并在此处输入链接描述。
这篇文章帮助我在iOS模拟器上测试了oneSignal推送通知,并解决了深度链接问题。
以下是我的步骤:
- 在桌面上创建
payload.apns
文件 - 将以下代码放入其中:
{
"Simulator Target Bundle": "com.example.app",
"aps": {
"alert": {
"title": "Push Notification",
"subtitle": "Test Push Notifications",
"body": "Testing Push Notifications on iOS Simulator",
}
},
"custom": {
"i": "notificationId as UUID",
"a": {"deeplinkKey": "{"deeplinkDetailKey":"deeplinkDetailValue"}", "launchURL": "example://collection/myCollectionId/type/1"}
}
}
- 记得用您的应用程序捆绑包ID替换
com.example.app
- 在模拟器上运行应用程序,然后关闭应用程序并保持地铁开放
- 在模拟器上拖放
payload.apns
文件,你会看到点击它的通知。如果你已经正确完成了第三步,你应该被重定向到你的应用程序 - (可选(如果你需要用推送通知测试深度链接,我还没有找到oneSignal使用的密钥,但正如你在上面的
.apns
文件中看到的,我在代表additionalData
的a
中添加了一个launchURL
,并在应用程序中手动处理捕获和打开它,以测试深度链接的问题 - (可选(要在应用程序中打开深度链接,您可以从
react-native
使用Linking
API:
import {Linking} from 'react-native'
Linking.openURL("Path/to/launchURL")
tl;博士,你不能向模拟器发送真正的通知。您只能向模拟发送模拟通知
您的服务器忽略了模拟器,因为模拟器没有设备令牌。苹果决定不给它一个。我假设这是为了让用户不能伪造他们的设备令牌并在模拟器上获得通知。。。
11.4只允许将APN有效载荷拖放到模拟器中,而不需要提及设备令牌。