在React Native中,处理权限有时可能会很棘手,尤其是当权限返回为null时。这种情况经常发生在权限系统配置不当或请求/响应周期出现问题时。在这篇博文中,我们将探讨权限可能为null的常见场景,以及如何有效地处理和调试这些情况。

1. 理解问题

在0.70.7之前的React Native版本中,处理像POST_NOTIFICATIONS这样的新权限可能需要手动更新PermissionsAndroid库。如果库本身不包含对这些权限的支持,这种更新可能是必要的。

2. 创建和应用补丁

为了解决PermissionsAndroid的问题,你可以为PermissionsAndroid模块创建一个补丁。这是通过使用patch-package工具来修改和保持对node_modules的更改,而无需直接修改源文件。

步骤指南

步骤1:安装patch-package

首先,安装patch-packagepostinstall-postinstall(如果你还没有安装的话):

npm install patch-package postinstall-postinstall --save-dev

步骤2:更新NativePermissionsAndroid.js

导航到node_modules/react-native/Libraries/PermissionsAndroid/NativePermissionsAndroid.js并按如下方式修改:

// 修改前
| 'android.permission.RECEIVE_WAP_PUSH'
| 'android.permission.RECEIVE_MMS'
| 'android.permission.WRITE_EXTERNAL_STORAGE';

// 修改后
| 'android.permission.RECEIVE_WAP_PUSH'
| 'android.permission.RECEIVE_MMS'
| 'android.permission.READ_EXTERNAL_STORAGE'
| 'android.permission.WRITE_EXTERNAL_STORAGE'
| 'android.permission.POST_NOTIFICATIONS';

更新PermissionsAndroid.js

导航到node_modules/react-native/Libraries/PermissionsAndroid/PermissionsAndroid.js并添加POST_NOTIFICATIONS权限:

// 修改前
RECEIVE_MMS: 'android.permission.RECEIVE_MMS',
READ_EXTERNAL_STORAGE: 'android.permission.READ_EXTERNAL_STORAGE',
WRITE_EXTERNAL_STORAGE: 'android.permission.WRITE_EXTERNAL_STORAGE',

// 修改后
RECEIVE_MMS: 'android.permission.RECEIVE_MMS',
READ_EXTERNAL_STORAGE: 'android.permission.READ_EXTERNAL_STORAGE',
WRITE_EXTERNAL_STORAGE: 'android.permission.WRITE_EXTERNAL_STORAGE',
POST_NOTIFICATIONS: 'android.permission.POST_NOTIFICATIONS',

// 以及
WRITE_CALL_LOG: string,
WRITE_CONTACTS: string,
WRITE_EXTERNAL_STORAGE: string,
POST_NOTIFICATIONS: string,

步骤3:创建补丁

使用patch-package生成补丁文件:

  1. 按上述方式修改文件。
  2. 运行以下命令创建补丁文件:
npx patch-package

这将在patches目录中创建一个.patch文件。

步骤4:更新package.json
确保你的package.json中的postinstall脚本设置为自动应用补丁:

"scripts": {
  "postinstall": "patch-package"
}

这个脚本会在每次运行npm installyarn install时应用你的补丁。

步骤5:测试你的更改

确保彻底测试你的更改:

  1. 运行你的React Native应用,检查POST_NOTIFICATIONS权限是否被识别。
  2. 验证所有更改是否正确应用,以及应用是否按预期运行。

最佳实践

  1. 保持补丁更新:定期审查和更新你的补丁,以确保与React Native和依赖项的未来版本兼容。
  2. 监控库更新:关注React Native和相关库的更新。如果在新版本中解决了问题,考虑升级以避免维护自定义补丁。
  3. 记录更改:记录任何自定义补丁和修改,以供将来参考和维护。

结论:

通过遵循这些步骤,你可以处理React Native中的权限问题,并确保你的应用能够顺利处理现有和新的权限。

首发于公众号 大迁世界,欢迎关注。📝 每周一篇实用的前端文章 🛠️ 分享值得关注的开发工具 ❓ 有疑问?我来回答

本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试完整考点、资料以及我的系列文章。


王大冶
68k 声望104.9k 粉丝