# 权限管理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);
}
});