FinClip为企业提供小程序生态圈技术产品,开发者可在FinClip小程序开发帮助中心找到相关FinClip小程序指引

# 权限管理Api类

app可以通过[FATClient sharedClient].authApiManager来调用权限相关的Api。

# 1. 获取小程序权限配置

//// 获取小程序权限设置
/// @param appletId  小程序id
- (NSArray<FATAuthModel *> *)getAppletAuthSetting:(NSString *)appletId;

# 2. 更新小程序的权限

/// 更新小程序的权限
/// @param scope  权限类型
/// @param authValue  新的权限值,1代表允许,2代表拒绝。如果是后台定位权限的修改,1: 代表前台定位  2:拒绝  3:代表后台定位
/// @param appletId  小程序id
- (BOOL)updateAppletScopeAuth:(FATScopeName)scope authValue:(NSInteger)authValue forApplet:(NSString *)appletId;

/// 更新小程序的权限 (后续将要废弃)
/// @param authType  权限类型  scope.location
/// @param authValue  新的权限值。1代表允许,2代表拒绝。如果是后台定位权限的修改,1: 代表前台定位  2:拒绝  3:代表后台定位
/// @param appletId  小程序id
- (BOOL)updateAppletAuth:(FATAuthorizationType)authType authValue:(NSInteger)authValue forApplet:(NSString *)appletId;

# 3. 打开个人信息与权限管理页面

# 3.1 默认样式

以默认样式打开个人信息与授权管理页面

/// 打开个人信息与权限管理页面
/// @param parentViewController 父控制器,打开的个人信息与权限管理页面会在父控制器上模态弹出
- (void)openPrivacyManage:(UIViewController *)parentViewController;

# 3.2 修改导航栏样式

配置自定义的返回按钮和标题,打开个人想想你与授权管理页面

/// 打开个人信息与权限管理页面
/// @param parentViewController parentViewController 父控制器,打开的个人信息与权限管理页面会在父控制器上模态弹出
/// @param pageConfig 页面的I配置,如返回按钮图片 标题位置
- (void)openPrivacyManage:(UIViewController *)parentViewController pageConfig:(FATExternalPageConfig *)pageConfig;

# 4. 获取小程序的隐私协议配置

/// 获取小程序的隐私协议配置
/// @param appletId  小程序id
/// @param complete  结果回调,privacyInfo包含隐私配置相关信息
- (void)getAppletPrivacyInfo:(NSString *)appletId complete:(void (^)(FATPrivacyInfo *privacyInfo, FATError *error))complete;

# 5. 自定义scope权限

自定义的scope权限与自定义api关联,所以一般都是跟自定义api一起使用。

可在App工程内,创建一个自定义的View,由App控制这个View的样式,要展示的权限,授权结果等。当这个view被隐藏时,再把结果告知小程序。

/**
 注册权限异步扩展Api
 注意:handler中异步返回的结果必须是可转json的字典。可用[NSJSONSerialization isValidJSONObject:xxxx]来判断
 @param extApiName API名
 @return 返回注册结果
 */
- (BOOL)registerScopeExtensionApi:(NSString *)extApiName handler:(void (^)(FATAppletInfo *appletInfo, id param, FATScopeChecker *scopeChecker,FATExtensionApiCallback callback))handler;

具体实现如下:

# 1.注册绑定自定义scope的View。

自定义view的.h


@interface FATScopeCustomView : UIView
@property (nonatomic, copy) void(^scopeAuthCompleteHandler)(NSInteger result, NSArray <FATAppletScope *>*scopeArray);
@property (weak, nonatomic) IBOutlet UISwitch *switch1;
@property (weak, nonatomic) IBOutlet UISwitch *switch2;
@property (weak, nonatomic) IBOutlet UISwitch *switch3;
- (IBAction)refuseOnClick:(id)sender;
- (IBAction)allowOnClick:(id)sender;
@end

自定义view的.m

- (IBAction)allowOnClick:(id)sender {
    
    FATAppletScope *scope1 = [[FATAppletScope alloc] init];
    scope1.title = @"scope1.title";
    scope1.scope = @"scope1";
    scope1.desc = @"scope1.desc";
    scope1.scopeName = @"scope1.scopeName";
    scope1.scopeStatus = self.switch1.on ? 0 : 1;
    
    FATAppletScope *scope2 = [[FATAppletScope alloc] init];
    scope2.title = @"scope2.title";
    scope2.scope = @"scope2";
    scope2.desc = @"scope2.desc";
    scope2.scopeName = @"scope2.scopeName";
    scope2.scopeStatus = self.switch2.on ? 0 : 1;
    
    FATAppletScope *scope3 = [[FATAppletScope alloc] init];
    scope3.title = @"scope3.title";
    scope3.scope = @"scope.phoneNumber";
    scope3.desc = @"scope3.desc";
    scope3.scopeName = @"scope3.scopeName";
    scope3.scopeStatus = self.switch3.on ? 0 : 1;
    
    if (self.scopeAuthCompleteHandler) {
        self.scopeAuthCompleteHandler(1, @[scope1, scope2, scope3]);
    }
}

- (IBAction)refuseOnClick:(id)sender {
    if (self.scopeAuthCompleteHandler) {
        self.scopeAuthCompleteHandler(0, @[]);
    }
}

view的示例效果:

view的示例效果

# 2.在自定义api实现里,把App的授权结果告知小程序。

    __block FATScopeCustomView *customView = [[[NSBundle mainBundle] loadNibNamed:@"FATScopeCustomView" owner:self options:nil] lastObject];
    [[FATClient sharedClient] registerScopeExtensionApi:@"finclipLogin" handler:^(FATAppletInfo *appletInfo, id param, FATScopeChecker *scopeChecker, FATExtensionApiCallback callback) {
        customView.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 300);
        [scopeChecker checkScopeWithView:customView];
        customView.scopeAuthCompleteHandler = ^(NSInteger result, NSArray<FATAppletScope *> * _Nonnull scopeArray) {
            if (result == 0) {
                // 拒绝
                callback(FATExtensionCodeFailure, nil);
            } else {
                // 允许
                callback(FATExtensionCodeSuccess, nil);
            }
            [scopeChecker dismissViewWithScopeList:scopeArray];
        };
    }];

# 3.在小程序的根目录创建 FinClipConf.js 文件,并添加该自定义 API

module.exports = {
  extApi:[
    { //普通交互API
      name: 'finclipExtScope', //扩展api名 该api必须Native方实现了
      sync: false, //是否为同步api
      params: { //扩展api 的参数格式,可以只列必须的属性
        url: ''
      }
    }
  ]
}

# 4.小程序中调用该自定义api

ft.finclipExtScope({
    success: function (res) {
        console.log("调用自定义api success");
        console.log(res);
    },
    fail: function (res) {
        console.log("调用自定义api fail");
        console.log(res);
    }
});
© FinClip with ❤ , Since 2017