iOS原生应用中Docusign弹出位置权限提示后闪退如何解决
DocuSign iOS SDK 2.5.2 签署流程权限弹窗后自动关闭修复方案
问题根因
该问题为DocuSign Native SDK 2.5.2版本的已知逻辑缺陷:SDK内置签署流程默认开启位置信息存证能力,点击继续按钮时会触发位置权限申请,但未处理权限弹窗弹出时的视图生命周期回调,会误触发签署页面的自动销毁逻辑,最终表现为弹窗弹出后签署窗口立即关闭。
修复步骤
- 第一步:在项目
Info.plist中补全位置权限声明
必须添加权限描述字段,否则即使申请权限也会被系统直接拒绝,可选字段根据业务场景选择:- 若仅签署时需要位置权限:添加
NSLocationWhenInUseUsageDescription,值填写向用户展示的权限用途,例如「签署合同需获取位置信息用于司法存证」 - 若有后台定位需求可选添加
NSLocationAlwaysAndWhenInUseUsageDescription,SDK 2.5.2版本未强制要求后台权限
- 若仅签署时需要位置权限:添加
- 第二步:拉起签署页面前预先申请位置权限
在触发DocuSign签署流程的入口处,先调用系统定位权限申请接口,等用户完成权限授权操作后再初始化加载签署页面,避免SDK内部触发权限申请导致异常,示例代码:// Swift 示例 import CoreLocation private let locationManager = CLLocationManager() func prepareForDocusignSign() { switch CLLocationManager.authorizationStatus() { case .notDetermined: locationManager.requestWhenInUseAuthorization() // 监听权限回调,确认授权完成后再拉起签署页面 case .authorizedWhenInUse, .authorizedAlways: // 已有权限,直接拉起签署页面 case .denied, .restricted: // 权限被拒绝,可选提示用户开启权限后再操作 @unknown default: break } }// Objective-C 示例 #import <CoreLocation/CoreLocation.h> - (void)prepareForDocusignSign { CLLocationManager *locationManager = [[CLLocationManager alloc] init]; CLAuthorizationStatus status = [CLLocationManager authorizationStatus]; if (status == kCLAuthorizationStatusNotDetermined) { [locationManager requestWhenInUseAuthorization]; // 监听权限回调,确认授权完成后再拉起签署页面 } else if (status == kCLAuthorizationStatusAuthorizedWhenInUse || status == kCLAuthorizationStatusAuthorizedAlways) { // 已有权限,直接拉起签署页面 } else { // 权限被拒绝,可选提示用户开启权限后再操作 } } - 第三步(可选,业务无需位置存证时使用):直接关闭SDK位置校验
若你的业务场景不需要位置信息存证,可在初始化SDK时直接关闭位置采集能力,彻底跳过权限申请逻辑,对应配置代码:// OC 配置 [DSMCapabilityManager sharedInstance].disableLocationCapture = YES;// Swift 配置 DSMCapabilityManager.sharedInstance().disableLocationCapture = true - 第四步:兜底兼容全局通知逻辑
若以上方案均无效,检查项目中是否存在全局监听UIApplicationWillResignActiveNotification通知的代码:位置权限弹窗弹出时会触发该通知,若你的逻辑中存在自动关闭模态视图的代码,会误关闭DocuSign的签署窗口,需在该逻辑中添加判断,排除类名为DSMNavigationController的视图即可。
内容的提问来源于stack exchange,提问作者Senthilkumar.S
相关产品推荐
相关产品推荐

