zoukankan      html  css  js  c++  java
  • App开发轮子--系统授权相关

    1.permission_handler,请求系统的所有权限

    1. app_settings:, 跳转到app授权界面 They are caused a new issue that flutter app could not determiner the correct localization strings
      ## 授权实现方式
    2. 集中在某个页面授权
    3. 共享授权信息的storage
    4. 前后台切换重新获取授权(用户在设置修改)
    5. 某个页面需要依赖多个授权,需要建立依赖关系串行执行每个授权步骤

      • 下面是其中一种实现方式: 通过requestQueue.count来控制会调

        for (int i = 0; i < permissions.count; ++i) {
        PermissionGroup value;
        [permissions[i] getValue:&value];
        PermissionGroup permission = value;
        id <PermissionStrategy> permissionStrategy = [PermissionManager createPermissionStrategy:permission];
        [_strategyInstances addObject:permissionStrategy];
        [permissionStrategy requestPermission:permission completionHandler:^(PermissionStatus permissionStatus) {
        permissionStatusResult[@(permission)] = @(permissionStatus);
        [requestQueue removeObject:@(permission)];
        [self->_strategyInstances removeObject:permissionStrategy];
        if (requestQueue.count == 0) {
        completion(permissionStatusResult);
        return;
        }
        }];
        }

    特别注意,在flutter工程中,授权弹框有一定的几率终端flutter的widget layout过程,可以将需要的授权集中起来在一个页面单独管理,或者推迟到widget构建第一帧完成之后。

    授权框架实现

    • 整体采用了策略模式,对各种权限进行统一的行为定制,采用统一的策略进行管理
    • 局限性: 部分status的状态差异化无法很好的区分,比如iOS的location定位,安卓部分机型照片权限的读写权限区分,有一定的捆绑关系在里面

    Issues记录

    1. iOS Location权限问题

    • iOS授权有一个单次定位,另外授权状态个数多余系统定义的base授权状态
    • permission_handler中针对于iOS location的授权状态有并列case,在代码中需要有先检查kCLAuthorizationStatusAuthorizedWhenInUse,如果是whenInUse状态则后面的always检查成功的结果需要忽略 Objective-C switch (authorizationStatus) {
      case kCLAuthorizationStatusNotDetermined:
      return PermissionStatusUnknown;
      case kCLAuthorizationStatusRestricted:
      return PermissionStatusRestricted;
      case kCLAuthorizationStatusDenied:
      return PermissionStatusDenied;
      case kCLAuthorizationStatusAuthorizedAlways:
      case kCLAuthorizationStatusAuthorizedWhenInUse:
      return PermissionStatusGranted;
      }
  • 相关阅读:
    【PL/SQL练习】显式游标
    【PL/SQL练习】控制结构
    【PL/SQL练习】游标cursor :oracle 在执行sql语句时,为sql语句所分配的一个私有的内存区域
    【PL/SQL练习】DML语句的处理(可以处理多行数据)
    【PL/SQL练习】复合变量: 可以一次传递多个值到变量中。
    【PL/SQL练习】基本的PL/SQL语句
    【小错误】监听
    【考试】用户管理
    【考试】简单的sql语句
    织梦自定义表单地区联动类型不可用的解决办法
  • 原文地址:https://www.cnblogs.com/wwoo/p/app-kai-fa-lun-zixi-tong-shou-quan-xiang-guan.html
Copyright © 2011-2022 走看看