iOS隐私安全:用户协议及隐私政策弹框(包含超链接属性、demo支持中英文切换)

简介: iOS隐私安全:用户协议及隐私政策弹框(包含超链接属性、demo支持中英文切换)

前言

熟悉监管要求,掌握合规操作流程,避免App被降级或者下架。需要确保App有《隐私政策》,并且在用户首次启动App时就弹出《隐私政策》取得用户同意。

登录界面弹用户协议及隐私政策时,如果用户点击不同意,不能停留在弹框界面,需要隐藏弹框,否则无法通过OPPO安卓应用市场。

image.png

用户协议及隐私政策》 弹框的实现步骤:

1、自定义TextView,采用富文本属性进行内容设置attributedText(包括下划线NSUnderlineStyleSingle、超链接NSLinkAttributeName 、颜色NSForegroundColorAttributeName 等信息) 2、实现代理方法textView:shouldInteractWithURL:inRange,处理点击超链接的回调(打开对应URL Webview)

  • 效果图(点击demo的右上架文字进行中英文切换

image.png

image.png

  • 文本框信息对应的中英文key,用于本地化
"Explain3" = "向您说明,在使用我们的服务时,我们如何收集、使用、储存和分享这些信息,以及我们为您提供的访问、更新、控制和保护这些信息的方式。本";
"Wemaycollect1"="您在使用我们的服务时,我们可能会收集和使用您的相关信息。我们希望通过本";
"then_click_Agree" = " ,希望您仔细阅读,充分理解协议中的内容后再点击同意。";
"Wemaycollect1"="We may collect and use information about you when you use our services. We hope to pass this";
"Explain3"= "Explain to you how we collect, use, store and share this information and how we provide you with access, update, control and protection when using our services. this";
"then_click_Agree"= "  , I hope you read it carefully, fully understand the content of the agreement, and then click Agree.";

从csdn资源下载demo源码:https://download.csdn.net/download/u011018979/14026773

I、 自定义TextView:QCTTextViewHyperLink

采用富文本属性进行内容设置attributedText

从csdn资源下载demo源码:https://download.csdn.net/download/u011018979/14026773

CSDN文章:https://kunnan.blog.csdn.net/article/details/103902362

获取资源下载链接

1.1 采用富文本属性进行内容设置

attributedText

包括下划线NSUnderlineStyleSingle、 超链接NSLinkAttributeName 、 颜色NSForegroundColorAttributeName 等信息

  • 新增超链接属性
    [attrStr addAttribute:NSLinkAttributeName value:k_serviceAgreement_URL range:str4Range];
        [attrStr addAttribute:NSLinkAttributeName value:k_serviceAgreement_URL range:str2Range];
        tmp.editable = NO;
        tmp.attributedText = attrStr;//text
            tmp.selectedRange = NSMakeRange(attrStr.length, 0);
        tmp.delegate = self;
        tmp.userInteractionEnabled = YES;
  • 设置下划线和颜色
  [attrStr setAttributes:@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle)}
                     range:str4Range];
    [attrStr addAttribute:NSFontAttributeName value:kPingFangFont(13) range:str4Range];
    [attrStr addAttribute:NSForegroundColorAttributeName value:HWColor(6, 53, 253) range:str4Range];

1.2 实现代理方法

  • 处理点击超链接的回调(打开对应URL Webview)
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange {
/**
 代理方法
 */
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange {
    __weak __typeof__(self) weakSelf = self;
    if([URL.absoluteString isEqualToString:k_serviceAgreement_URL]){
        [self.viewModel.hiddenQCTserviceAgreementViewSubject sendNext:nil];
        void (^showQCTserviceAgreementViewBlock)(id sender) = ^void(id sender) {
            NSLog(@"nil");
            // 展示
            [weakSelf.viewModel.showQCTserviceAgreementViewSubject sendNext:nil];
        };
                                        [self.viewModel.User_Agreement_and_Privacy_PolicySubject sendNext:showQCTserviceAgreementViewBlock];
    }
//
    return NO;
}

II、封装《用户协议及隐私政策》视图

  • 获取带有富文本字符串的TextView视图
//
//  QCTTextViewHyperLink.m
//  retail
//
//  Created by mac on 2020/1/9.
//  Copyright © 2020 QCT. All rights reserved.
//
#import "QCTTextViewHyperLink.h"
@implementation QCTTextViewHyperLink
/**
 获取 《用户协议及隐私政策》的数据
 @return《用户协议及隐私政策》的数据
 */
+ (instancetype)getserviceAgreemenTextView{
    QCTTextViewHyperLink * tmp  = [QCTTextViewHyperLink new];
    NSString *str1 = QCTLocal(@"Wemaycollect1");
    NSString *str2 = [NSString stringWithFormat:@"《%@》",QCTLocal(@"Service_Agreement4User")];
    NSString *str3 = QCTLocal(@"Explain3");
    NSString *str4 = [NSString stringWithFormat:@"《%@》",QCTLocal(@"Service_Agreement4User")];
    NSString *str5 = QCTLocal(@"then_click_Agree");
    NSString *str = [NSString stringWithFormat:@"%@%@%@%@%@",str1,str2,str3,str4,str5];
    //1、 设置富文本属性
    NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:str];
    [attrStr addAttribute:NSFontAttributeName value:kPingFangFont(13) range:NSMakeRange(0 ,attrStr.length)];
    [attrStr addAttribute:NSForegroundColorAttributeName value:HWColor(51, 51, 51) range:NSMakeRange(0 ,attrStr.length)];
// 2、设置行lineSpacing
    NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
    paragraphStyle.lineSpacing = 5;
    NSMutableDictionary *attributes = [NSMutableDictionary dictionary];
    [attributes setObject:paragraphStyle forKey:NSParagraphStyleAttributeName];
    [attrStr addAttributes:attributes range:NSMakeRange(0, attrStr.length)];
    //        NSParagraphStyle defaultParagraphStyle
//3、设置下划线和颜色
    NSRange str2Range = NSMakeRange(str1.length, str2.length );
    NSRange str4Range = NSMakeRange(str1.length+str2.length+str3.length, str4.length );
    [attrStr setAttributes:@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle)}
                     range:str2Range];
    [attrStr addAttribute:NSFontAttributeName value:kPingFangFont(13) range:str2Range];
    [attrStr addAttribute:NSForegroundColorAttributeName value:HWColor(6, 53, 253) range:str2Range];
    [attrStr setAttributes:@{NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle)}
                     range:str4Range];
    [attrStr addAttribute:NSFontAttributeName value:kPingFangFont(13) range:str4Range];
    [attrStr addAttribute:NSForegroundColorAttributeName value:HWColor(6, 53, 253) range:str4Range];
    //4、新增超链接属性
    [attrStr addAttribute:NSLinkAttributeName value:k_serviceAgreement_URL range:str4Range];
    [attrStr addAttribute:NSLinkAttributeName value:k_serviceAgreement_URL range:str2Range];
    tmp.editable = NO;
    tmp.attributedText = attrStr;//text
    tmp.selectedRange = NSMakeRange(attrStr.length, 0);
    //        tmp.userInteractionEnabled = YES;
    return tmp;
}
// 继承UITextView重写这个方法
- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    // 返回NO为禁用,YES为开启
    // 粘贴
    if (action == @selector(paste:)) return NO;
    // 剪切
    if (action == @selector(cut:)) return NO;
    // 复制
    if (action == @selector(copy:)) return NO;
    // 选择
    if (action == @selector(select:)) return NO;
    // 选中全部
    if (action == @selector(selectAll:)) return NO;
    // 删除
    if (action == @selector(delete:)) return NO;
    // 分享
    if (action == @selector(share)) return NO;
    return [super canPerformAction:action withSender:sender];
}
@end

III、Q&A


目录
相关文章
|
5月前
|
存储 运维 安全
iOS加固原理与常见措施:保护移动应用程序安全的利器
iOS加固原理与常见措施:保护移动应用程序安全的利器
74 0
|
5月前
|
安全 前端开发 iOS开发
钉钉里微应用ios 底部安全区域的颜色怎么修改?
钉钉里微应用ios 底部安全区域的颜色怎么修改?
178 5
|
2月前
|
语音技术 开发工具 图形学
Unity与IOS⭐一、百度语音IOS版Demo调试方法
Unity与IOS⭐一、百度语音IOS版Demo调试方法
|
22天前
|
iOS开发 UED 开发者
iOS 手势中cancelsTouchesInView delaysTouchesBegan delaysTouchesEnded 三种属性的使用
iOS 手势中cancelsTouchesInView delaysTouchesBegan delaysTouchesEnded 三种属性的使用
|
2月前
|
Swift iOS开发
iOS开发-属性的内存管理
【8月更文挑战第12天】在iOS开发中,属性的内存管理至关重要,直接影响应用性能与稳定性。主要策略包括:`strong`(强引用),不维持对象生命期,可用于解除循环引用;`assign`(赋值),适用于基本数据类型及非指针对象属性;`copy`,复制对象而非引用,确保对象不变性。iOS采用引用计数管理内存,ARC(自动引用计数)自动处理引用增减,简化开发。为避免循环引用,可利用弱引用或Swift中的`[weak self]`。最佳实践包括:选择恰当的内存管理策略、减少不必要的强引用、及时释放不再使用的对象、注意block内存管理,并使用Xcode工具进行内存分析。
|
3月前
|
数据安全/隐私保护 iOS开发 开发者
探索iOS 15中的隐私保护新特性
在数字化时代,个人隐私的保护日益成为公众关注的焦点。苹果公司一直以用户隐私安全为荣,其最新发布的iOS 15系统进一步加深了这一承诺。本文将深入探讨iOS 15中新增的隐私保护功能,分析它们如何增强用户的数据安全性,并讨论这些更新对应用开发者和终端用户的深远影响。
|
4月前
|
前端开发 iOS开发
input框设置placeholder属性在iOS中显示不完整
input框设置placeholder属性在iOS中显示不完整
44 1
|
3月前
|
安全 搜索推荐 数据安全/隐私保护
探索iOS 15中的隐私保护革新
在数字时代,隐私保护成为用户和开发者共同关注的焦点。苹果公司通过iOS 15的发布,进一步巩固了其在移动操作系统隐私保护领域的领先地位。本文将深入分析iOS 15中新增的隐私保护功能,探讨其对用户、开发者及整个生态系统的影响,并提供实用建议,帮助读者更好地利用这些新特性来保护自己的数据安全。
41 0
|
3月前
|
安全 数据处理 数据安全/隐私保护
探究iOS与安卓在隐私保护方面的差异及影响
随着智能手机的普及,操作系统的隐私保护功能成为了消费者关注的焦点。本文将深入分析iOS和安卓两大主流操作系统在隐私保护方面的设计差异,并探讨这些差异对用户隐私安全的实际影响。通过对比研究,揭示各系统的优势与不足,为读者提供全面的系统选择参考。
|
4月前
|
安全 算法 数据安全/隐私保护
探索iOS与Android的隐私保护机制
【6月更文挑战第5天】在数字时代,隐私保护已成为用户最关心的问题之一。iOS和Android作为两大主流操作系统,各自发展出了独特的隐私保护技术。本文将深入探讨这两个平台在隐私保护方面的策略、技术和挑战。
93 3
下一篇
无影云桌面