前言
React Native 是一个广受欢迎的开源框架,可以使用 JavaScript 和 React 来构建 iOS 和 Android 应用程序。而 PushNotificationIOS 是 React Native 提供的用于实现本地推送功能的组件,开发者可以使用它来发送通知,提醒用户注意更新、新内容等。
但是,使用 PushNotificationIOS 时,开发者可能会遇到一些问题,比如未调用成功,调用失败等错误。本文将会详细介绍这些错误并提供解决方案。
实例代码说明
我们假设已经在 React Native 项目中安装了 PushNotificationIOS,首先确保应用程序有发送通知的权限。在 iOS 上,我们需要添加一个特定的权限,来询问用户是否同意发送本地通知。
React Native 为此提供了各种函数,可在当前组件加载完成后自行调用 PushNotificationIOS.checkPermissions
和 PushNotificationIOS.requestPermissions
函数。
对应的声明为:
-- -------------------- ---- ------- -- ------------------- -------------------------------------- --------------------------- -- ---------------------------- --------------------------------------------------------- -- - --------------- ----------- --- --- -- ----------- ----------------------------------------------------------- -- - --------------- ----------- --- ---
checkPermissions
:检查应用程序是否已被授权使用本地通知。requestPermissions
:向用户请求使用本地通知的权限。
以下示例代码是一种典型的使用 PushNotificationIOS 组件的方法。
-- -------------------- ---- ------- ------ ------ - --------- - ---- -------- ------ - ----------------- ---- - ---- --------------- ------ ------------------- ---- ------------------------------------------------ ----- ------------------------- ------- --------- - ----------- - -- -- - ---------------------------------------------- ---------- -------- ----------- ----- ------------ ------ --------------------------- -- ---------- ---------- --------- - --- ------ -- --- -- -------- - ------ - ----------------- --------------------------- ---------- ------------------- ------------------- -- - - ------ ------- --------------------------
上面的代码定义了一个按钮,当用户点击它时,将显示一个本地通知。我们将在下一部分讨论可能出现的问题及其解决方案。
调用未成功
如果你按照上述示例代码在你的 React Native 应用程序中编写代码,但是当你尝试在 iOS 上发送本地通知时,你发现它并没有工作,甚至没有打印任何信息或状态改变,我们可以逐步排除一下可能出现的问题:
必须受到授权
首先,应用程序必须被允许发送通知。此权限对于新版的 iOS 是必须的。你可能已经请求了这个权限,但是你必须要检查它是否已被授权。
PushNotificationIOS.checkPermissions().then((permissions) => { if (permissions.alert) { console.log('Permission already granted.'); } else { PushNotificationIOS.requestPermissions(); } });
设备端没有用户的许可
即使用户在应用程序中授予了通知权限,仍然需要在设备的设置中打开通知(打开通知后,会有小红点显示)。
通过运行以下代码可以检查设置是否正确:
PushNotificationIOS.checkPermissions().then((permissions) => { if (!permissions.alert) { Alert.alert( 'Attention', 'Please turn on notifications in device Settings > Notifications > Your app', ); } });
设备可能不支持发送通知
还有可能是设备不支持发送通知,但这种情况相对较少。
代码必须运行在主线程
当你的代码运行时,一定确保它在主线程上运行,这可以避免在处理推送通知时出现进一步的问题。把你的代码都写在主线程里,防止出现未知的问题。
import { runOnMainThread } from './utils/runOnMainThread'; ... runOnMainThread(() => { // Your code });
未正确设置通知标题和内容
确保通知的标题和内容被正确设置,并且不为空。
PushNotificationIOS.presentLocalNotification({ alertBody: message, alertTitle: 'PushNotificationDemo', title: 'PushNotificationDemo', userInfo: { id: '1234' }, });
如果这些问题都被解决了,但是通知还是不能发送,你需要检查你的 Apple Push Notification 证书是否已在成果解锁。你可以通过查看 Apple Developer 中心中的证书来进行检查。
结论
使用 PushNotificationIOS 时,你可能会遇到多种错误。但在确定问题后,它们都是可以得到解决的。
在判断通知是否成功发送时,请确保所有必需的步骤都已被执行,且应用程序始终在主线程上运行。
使用 PushNotificationIOS 组件来发送本地通知是一项重要的功能,对于提醒用户要注意某些固定时间、打开应用等有很大的帮助。
参考资料:
- https://reactnative.dev/docs/pushnotificationios
- https://levelup.gitconnected.com/react-native-push-notification-ios-issue-solved-3fc3a31b6a8b
- https://stackoverflow.com/questions/53627325/react-native-pushnotification-ios-not-working
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674d8d94947dc5bcb3fe3461