uni-app iOS云打包修改权限提示语

发布于 1周前 作者 yuanlaile 来自 Uni-App

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 说明使用用户地理位置的原因"
        ]
      }
    }
}

注意事项

  • 通过上面方法修改提示语后需要重新打包,调试基座的提示语不会变化。

举例说明

比如一个外卖应用,获取定位后需要展示附近的美食信息。那么,相应的定位权限描述,应当是类似“获取定位信息用于为用户提供附近的美食信息”这样的描述。而不应当是,“获取用户当前位置信息”这种没有明确描述定位用处的信息。

示例图片


1 回复

在uni-app中进行iOS云打包时,如果需要修改权限提示语,通常涉及修改原生iOS项目的Info.plist文件。在uni-app项目中,直接操作Info.plist文件不太方便,但可以通过一些技巧实现。下面我将展示如何通过manifest.json配置和自定义原生插件来修改iOS权限提示语。

方法一:使用manifest.json配置(有限支持)

虽然uni-app的manifest.json文件对iOS权限配置的支持有限,但可以尝试在mp-weixinapp-plus等配置节点下添加一些iOS特定的配置(注意:这种方法可能并不总是有效,具体取决于uni-app的版本和官方支持情况)。

{
  "mp-weixin": {
    "appid": "your-appid",
    "setting": {
      "ios": {
        "NSLocationAlwaysUsageDescription": "需要您的位置信息以便提供更好的服务",
        "NSCameraUsageDescription": "需要访问您的相机"
      }
    }
  }
}

注意:上述配置可能不会生效,因为uni-app的官方文档并未明确说明支持在manifest.json中直接修改iOS权限提示语。

方法二:使用自定义原生插件

更可靠的方法是创建一个自定义的原生插件来修改Info.plist文件。以下是一个简要的步骤和代码示例:

  1. 创建原生插件

    • 在uni-app项目根目录下创建一个nativeplugins文件夹。
    • nativeplugins文件夹中创建一个新的插件文件夹,例如ModifyPermissions
    • ModifyPermissions文件夹中创建plugin.json和iOS原生代码(如ModifyPermissions.mModifyPermissions.h)。
  2. 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": []
      }
    ]
  }
}
  1. 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的脚本在构建时修改。

  1. 在Xcode中集成:将插件集成到Xcode项目中,并在构建阶段调用+ (void)modifyPermissions方法(通常通过Xcode的Build Phases中的Run Script来实现)。

这种方法虽然复杂,但提供了最大的灵活性和控制力。

回到顶部