在React Native中,处理权限有时可能会很棘手,尤其是当权限返回为null
时。这种情况经常发生在权限系统配置不当或请求/响应周期出现问题时。在这篇博文中,我们将探讨权限可能为null
的常见场景,以及如何有效地处理和调试这些情况。
1. 理解问题
在0.70.7之前的React Native版本中,处理像POST_NOTIFICATIONS
这样的新权限可能需要手动更新PermissionsAndroid
库。如果库本身不包含对这些权限的支持,这种更新可能是必要的。
2. 创建和应用补丁
为了解决PermissionsAndroid
的问题,你可以为PermissionsAndroid
模块创建一个补丁。这是通过使用patch-package
工具来修改和保持对node_modules
的更改,而无需直接修改源文件。
步骤指南
步骤1:安装patch-package
首先,安装patch-package
和postinstall-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
生成补丁文件:
- 按上述方式修改文件。
- 运行以下命令创建补丁文件:
npx patch-package
这将在patches
目录中创建一个.patch
文件。
步骤4:更新package.json
确保你的package.json
中的postinstall
脚本设置为自动应用补丁:
"scripts": {
"postinstall": "patch-package"
}
这个脚本会在每次运行npm install
或yarn install
时应用你的补丁。
步骤5:测试你的更改
确保彻底测试你的更改:
- 运行你的React Native应用,检查
POST_NOTIFICATIONS
权限是否被识别。 - 验证所有更改是否正确应用,以及应用是否按预期运行。
最佳实践
- 保持补丁更新:定期审查和更新你的补丁,以确保与React Native和依赖项的未来版本兼容。
- 监控库更新:关注React Native和相关库的更新。如果在新版本中解决了问题,考虑升级以避免维护自定义补丁。
- 记录更改:记录任何自定义补丁和修改,以供将来参考和维护。
结论:
通过遵循这些步骤,你可以处理React Native中的权限问题,并确保你的应用能够顺利处理现有和新的权限。
首发于公众号 大迁世界,欢迎关注。📝 每周一篇实用的前端文章 🛠️ 分享值得关注的开发工具 ❓ 有疑问?我来回答
本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试完整考点、资料以及我的系列文章。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。