# 权限管理Api类
app可以通过[FATClient sharedClient].authApiManager
来调用权限相关的Api。
# 1. 获取小程序权限配置
支持的app类型
小程序✅ 小游戏✅ H5应用🚫
//// 获取小程序权限设置 /// @param appletId 小程序id - (NSArray<FATAuthModel *> *)getAppletAuthSetting:(NSString *)appletId;
已复制代码
# 2. 更新小程序的权限
支持的app类型
小程序✅ 小游戏✅ H5应用🚫
/// 更新小程序的权限 /// @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. 打开个人信息与权限管理页面
打开该页面不用区分是小程序还是小游戏或H5应用
# 3.1 默认样式
以默认样式打开个人信息与授权管理页面
/// 打开个人信息与权限管理页面 /// @param parentViewController 父控制器,打开的个人信息与权限管理页面会在父控制器上模态弹出 - (void)openPrivacyManage:(UIViewController *)parentViewController;
已复制代码
# 3.2 修改导航栏样式
配置自定义的返回按钮和标题,打开个人信息与授权管理页面
/// 打开个人信息与权限管理页面 /// @param parentViewController parentViewController 父控制器,打开的个人信息与权限管理页面会在父控制器上模态弹出 /// @param pageConfig 页面的I配置,如返回按钮图片 标题位置 - (void)openPrivacyManage:(UIViewController *)parentViewController pageConfig:(FATExternalPageConfig *)pageConfig;
已复制代码
# 4. 获取小程序的隐私协议配置
支持的app类型
小程序✅ 小游戏✅ H5应用🚫
/// 获取小程序的隐私协议配置 /// @param appletId 小程序id /// @param complete 结果回调,privacyInfo包含隐私配置相关信息 - (void)getAppletPrivacyInfo:(NSString *)appletId complete:(void (^)(FATPrivacyInfo *privacyInfo, FATError *error))complete;
已复制代码
# 5. 自定义scope权限
支持的app类型
小程序✅ 小游戏✅ H5应用🚫
自定义的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的示例效果:
# 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); } });
已复制代码