当前位置: 首页 > 知识库问答 >
问题:

在iOS模拟器上测试OneSignal推送通知

危卜鹰
2023-03-14

我在项目中设置了react native onesignal,以使用onesignal实现推送通知。

从Xcode 11.4 Beta开始,可以在iOS模拟器上测试推送通知。我创建了JSON格式的apns文件来测试模拟器上的推送通知,它运行得非常好。

但我如何模拟OneSignal推送通知呢?

我遵循OneSignal文档并希望接收从OneSignal仪表板发送的推送通知。

以下是我在应用程序上实现的内容。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文件中使用任何技巧吗?

任何帮助都将不胜感激。

共有1个答案

袁晟
2023-03-14

tl;博士,你不能向模拟器发送真正的通知。只能向模拟器发送模拟通知

你的服务器没有模拟器,因为模拟器没有设备令牌。苹果决定不给它一个。我想这是为了让用户不能伪造他们的设备令牌并在模拟器上获得通知。。。

11.4只允许将APN有效负载拖放到模拟器中,而无需提及设备令牌。

 类似资料:
  • 说明 此协议用于在客户端模拟测试推送MQTT消息(测试使用,需要联系果盘开发人员开通测试主题推送权限) 请求地址 http://t1.dc78.cn/MqttAuth/testPush 请求方式 POST 请求参数 参数 参数名称 必填 描述 范例 topic 消息主题 是 mqtt订阅的主题 ms_6786或table_6786 msg 消息体 是 对应协议中的消息体数据,json格式 返回 {

  • 我在google cloud上使用推送通知,但出于某种原因,我无法在模拟器上接收推送通知。 但是,当我在实际设备上测试时,相同的应用程序确实会收到通知。

  • 问题内容: 我一直在尝试让xcodebuild测试在使用Jenkins的远程计算机上工作。我遇到了无法通过SSH启动GUI的错误,并通过JNLP从站启动从属设备来解决它,如下所示: 通过SSH在Xcode6下运行xcodebuild测试时超时。现在我收到一个新错误: 错误域= IDEUnitTestsOperationsObserverErrorDomain代码= 3“由于等待测试过程中的登录超时

  • 嗨,我想在appium上使用ios模拟器并行运行ios测试用例。我知道MAC会有限制,因为只有一个模拟器会启动,但有没有后门入口可以让它们并行运行,我不想使用网格,因为有一些原因,所以有没有办法在ios模拟器上并行运行ios测试用例。 如果我一次运行两个不同端口和地址的appium服务器,只有一个ios模拟器会启动,因为它会关闭另一个。 我使用的是1.6.4 appium服务器和Xcode 8。

  • 简介 在 Laravel 应用程序测试中,你可能希望「模拟」应用程序的某些功能的行为,从而避免该部分在测试中真正执行。例如:在控制器执行过程中会触发事件(Event),从而避免该事件在测试控制器时真正执行。这允许你在仅测试控制器 HTTP 响应的情况时,而不必担心触发事件。当然,你也可以在单独的测试中测试该事件逻辑。 Laravel 针对事件、任务和 Facades 的模拟,提供了开箱即用的辅助函

  • #使用Mocks测试 在现实世界的应用程序中,我们的组件很可能具有外部依赖性。当为组件编写单元测试时,如果我们可以模拟这些外部依赖性,以使我们的测试仅依赖于被测试组件的行为,这将是理想的。 vue-loader提供了一个特性,它允许你使用inject-loader向*.vue组件注入任意依赖项。一般的想法是,不是直接导入组件模块,我们使用inject-loader为该模块创建一个“模块工厂”函数。