uni-app iOS云打包修改权限提示语
uni-app iOS云打包修改权限提示语
iOS App Store 提交注意事项
隐私信息权限
- 通讯录
NSContactsUsageDescription
- 麦克风
NSMicrophoneUsageDescription
- 相机
NSCameraUsageDescription
- 相册(访问)
NSPhotoLibraryUsageDescription
- 相册(保存图片到相册)
NSPhotoLibraryAddUsageDescription
- 定位(使用时获取地理位置)
NSLocationWhenInUseUsageDescription
- 定位(持续获取地理位置)
NSLocationAlwaysUsageDescription
- 定位(iOS11.3及以上版本)
NSLocationAlwaysAndWhenInUseUsageDescription
- 蓝牙
NSBluetoothPeripheralUsageDescription
- 语音转文字
NSSpeechRecognitionUsageDescription
- 日历
NSCalendarsUsageDescription
设置方法
使用视图方式打开 manifest.json
文件,在 plus->distribute->apple
节点下添加 plistcmds
(不推荐使用此方法),数据类型为 Array:
"plus": {
"distribute": {
"apple": {
"plistcmds": [
"Set :NSContactsUsageDescription 说明读取用户通讯录的原因",
"Set :NSMicrophoneUsageDescription 说明使用麦克风的原因",
"Set :NSPhotoLibraryUsageDescription 说明读取用户相册的原因",
"Set :NSCameraUsageDescription 说明使用用户相机的原因",
"Set :NSPhotoLibraryAddUsageDescription 说明向用户相册添加图片的原因",
"Set :NSLocationAlwaysUsageDescription 说明持续获取用户地理位置的原因",
"Set :NSLocationWhenInUseUsageDescription 说明使用用户地理位置的原因",
"Set :NSLocationAlwaysAndWhenInUseUsageDescription 说明使用用户地理位置的原因"
]
}
}
}
注意事项
- 通过上面方法修改提示语后需要重新打包,调试基座的提示语不会变化。
举例说明
比如一个外卖应用,获取定位后需要展示附近的美食信息。那么,相应的定位权限描述,应当是类似“获取定位信息用于为用户提供附近的美食信息”这样的描述。而不应当是,“获取用户当前位置信息”这种没有明确描述定位用处的信息。
在uni-app中进行iOS云打包时,如果需要修改权限提示语,通常涉及修改原生iOS项目的Info.plist文件。在uni-app项目中,直接操作Info.plist文件不太方便,但可以通过一些技巧实现。下面我将展示如何通过manifest.json
配置和自定义原生插件来修改iOS权限提示语。
方法一:使用manifest.json配置(有限支持)
虽然uni-app的manifest.json
文件对iOS权限配置的支持有限,但可以尝试在mp-weixin
或app-plus
等配置节点下添加一些iOS特定的配置(注意:这种方法可能并不总是有效,具体取决于uni-app的版本和官方支持情况)。
{
"mp-weixin": {
"appid": "your-appid",
"setting": {
"ios": {
"NSLocationAlwaysUsageDescription": "需要您的位置信息以便提供更好的服务",
"NSCameraUsageDescription": "需要访问您的相机"
}
}
}
}
注意:上述配置可能不会生效,因为uni-app的官方文档并未明确说明支持在manifest.json
中直接修改iOS权限提示语。
方法二:使用自定义原生插件
更可靠的方法是创建一个自定义的原生插件来修改Info.plist文件。以下是一个简要的步骤和代码示例:
-
创建原生插件:
- 在uni-app项目根目录下创建一个
nativeplugins
文件夹。 - 在
nativeplugins
文件夹中创建一个新的插件文件夹,例如ModifyPermissions
。 - 在
ModifyPermissions
文件夹中创建plugin.json
和iOS原生代码(如ModifyPermissions.m
和ModifyPermissions.h
)。
- 在uni-app项目根目录下创建一个
-
plugin.json(示例):
{
"id": "ModifyPermissions",
"version": "1.0.0",
"name": "Modify Permissions",
"description": "Modify iOS permissions descriptions",
"platform": "ios",
"provider": "your-name",
"app-plus": {
"nativePlugins": [
{
"className": "ModifyPermissions",
"methods": []
}
]
}
}
- iOS原生代码(在
ModifyPermissions
文件夹中创建ModifyPermissions.m
):
#import <Foundation/Foundation.h>
@interface ModifyPermissions : NSObject
+ (void)modifyPermissions;
@end
@implementation ModifyPermissions
+ (void)modifyPermissions {
NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
NSMutableDictionary *mutableInfoDict = [infoDict mutableCopy];
mutableInfoDict[@"NSLocationAlwaysUsageDescription"] = @"需要您的位置信息以便提供更好的服务";
mutableInfoDict[@"NSCameraUsageDescription"] = @"需要访问您的相机";
// 更新Info.plist
[[NSBundle mainBundle] setInfoDictionary:mutableInfoDict];
}
@end
注意:实际上,直接修改[NSBundle mainBundle] infoDictionary]
在运行时是不被允许的。这里只是为了演示如何设置字典。正确的方法是在Xcode中手动编辑Info.plist或通过Xcode的脚本在构建时修改。
- 在Xcode中集成:将插件集成到Xcode项目中,并在构建阶段调用
+ (void)modifyPermissions
方法(通常通过Xcode的Build Phases中的Run Script来实现)。
这种方法虽然复杂,但提供了最大的灵活性和控制力。