iOS支付项目实践专栏- 总目录(持续更新)

2022年01月16日 阅读数:1
这篇文章主要向大家介绍iOS支付项目实践专栏- 总目录(持续更新),主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

 

文章目录

 

引言

欢迎你们来到#公众号:iOS逆向的《iOS支付项目实践》专栏javascript

本文列出学习大纲,同时这也能够做为你们学习《iOS支付项目实践》这个专栏的索引。
文中的蓝字都是传送门,点击进入便可html

本专栏以实战为线索,逐步深刻iOS开发各个环节,掌握支付APP经常使用的基础功能(均含demo源码),打造完整native客户端工做流,提高工程化编码能力和思惟能力。java

适合iOS入门同窗,在开发支付类app场景将使用到的基础功能ios

本专栏的总体大纲模块git

一、界面搭建(收银台、电子签名、购物车、计算器、商品详情页、《用户协议及隐私政策》弹框、反馈页面)github

二、收付款(语音播报、参数签名)ajax

三、OCR(自定义相机进行银行卡/身份证信息识别)算法

四、封装银联接口协议、网络请求安全优化、敏感逻辑的保护方案编程

五、处理用户输入内容(金额/手机号码等)bootstrap

六、【封装富文本API,采用block实现链式编程】(block 的妙用:结合block和方法的优势实现iOS的链式编程)

七、代码管理: CocoaPods

八、图片压缩:【解决压缩以后图片模糊的问题】

九、iOS测试:经过GPX文件修改经纬度信息(模拟iOS设备的位置)

十、iOS经常使用动画 【 定点缩放弹窗】利用锚点anchorPoint进行实现

十一、iOS Horizontal Popup View 【 横向(水平方向)弹出菜单视图】例子:商品列表支持弹出菜单进行下/上架商品、打印商品价签、编辑商品信息、同步网店等操做popover

十二、Masonry进阶 :【MASConstraint的安装与移除】- 应用场景:灵活控制视图的展现与隐藏

1三、iOS上传图片【支持删除和添加】(使用UICollectionViewCell、UITableViewCell 及Masonry。采用MVVM实现。)

1四、蓝牙打印:iOS 【打印价格标签的模板及打印小票的模版、 实现自动链接最近使用的打印机】 (针对佳博GP-2120TU型号) 包含完整的 demo 源码

1五、【iOS APP 内的国际化切换】一、字符串的本地化、二、自定义解析本地化字符串的工具类LanguageManager、三、例子:登陆界面切换中英文。

博主简介

xxx信息技术服务有限公司,iOS高级工程师,负责iOS支付项目客户端核心组件开发。擅长iOS,有8年开发经验,曾参与中国移动和包项目的开发。博客专家(移动开发领域新星创做者)

怎么下载专栏的demo?

目前平台文章和资源没有关联,这个功能仍是排期中

iOS支付项目实践专栏- 总目录(持续更新)_类目

另外因为历史缘由形成订阅的专栏可能混杂着别的专利的超连接

以前是无论你订阅哪一个专栏均可以看博主的所有专栏
后来平台取消这个模式了

精品资源汇总(持续更新)

I 、视图

1.1 《用户协议及隐私政策》弹框

一、原理文章

二、功能使用:点击demo的右上架文字进行中英文切换

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

3.一、自定义TextView,采用富文本属性进行内容设置attributedText(包括下划线NSUnderlineStyleSingle、超连接NSLinkAttributeName 、颜色NSForegroundColorAttributeName 等信息)

3.二、实现代理方法textView:shouldInteractWithURL:inRange,处理点击超链

1.2 电子签名

一、原理文章

二、功能:采集电子签名,支持签名界面为横屏其他页面都是竖屏、清除重写、灵活控制提示语信息、以及查看商户协议

三、核心原理: 只旋转特定的屏幕

四、核心步骤:一、viewWillAppear设置横屏二、viewWillDisappear 设置竖屏

五、用法简单:采用block回调电子签名图片

1.3 商品详情页

一、原理文章

二、应用场景:商品详情页以及须要展现大量图片的界面

三、核心原理
3.1)按照图片的原来宽高比进行缩

3.2)UICollectionView的高度自适应

1.4 上传图片视图的封装【支持删除和添加】

demo源码下载

一、文章

二、应用场景: 上传和展现多张图片的场景,好比风险商户处理、发布商品图片

三、 效果图:
iOS支付项目实践专栏- 总目录(持续更新)_自定义_02
四、技术特色:使用UICollectionViewCell、UITableViewCell 控件进行搭建,使用Masonry 框架布局,采用MVVM结构。

五、个人其余相似SDK pod ‘KNPodlib’
iOS支付项目实践专栏- 总目录(持续更新)_自定义_03

1.5 查看风险商户的证实材料,图片支持滑动切换

 

iOS查看大图浏览器

 

从CSDN下载Demo源码

  • 应用场景: 查看多张大图,好比查看风险商户的证实材料,图片支持滑动切换

  • 文章

  • 主要功能:进入查看器以后,可左右滑动查看上/下张,并支持下滑视图退出查看器

1.6 iOS 经常使用动画【 定点缩放弹窗】

  • 将商品添加商品到购物车的动画

下载Demo
一、应用场景:购物车模块,将商品添加商品到购物车

二、文章地址

三、视频地址

 

添加商品到购物车的动画(将商品图片iconImgV 移动到购

 

  • (定点缩放弹窗)的应用场景:

一、会员详情的右侧下拉操做菜单
iOS支付项目实践专栏- 总目录(持续更新)_ios_04
二、浏览器的右侧下拉菜单
iOS支付项目实践专栏- 总目录(持续更新)_javascript_05
三、原文
四、demo下载地址
csdn 仓库demo地址
github 仓库地址
五、相关文章:利用锚点anchorPoint进行实现

1.7 iOS抽奖转盘:几率抽奖算法 & 转盘算法 & 转盘主视图的实现思路

 

iOS几率抽奖算法 & 转盘算法


iOS抽奖转盘:几率抽奖算法 & 转盘算法 & 转盘主视图的实现思路 (下载完整Demo)

文章

原理:利用CoreGraphics进行自定义转盘的绘制

视频
iOS支付项目实践专栏- 总目录(持续更新)_应用场景_06

1.8 自定义相机( 银行卡/身份证识别OCR、矩形边缘识别)

一、 资源下载
二、原理文章

  • 矩形边缘识别

iOS Document Scanner: 矩形边缘识别(边缘检测 ) CIDetectorTypeRectangle
下载Demo源码

一、应用场景:为了提高用户体验,在OCR识别场景都将利用到边缘检测

二、原理:采用原生CoreImage框架下CIDetector可进行边缘检测,识别到边缘以后使用CAShapeLayer将边缘绘制并显示

三、原理文章

  • 身份证识别

下载Demo源码
一、功能:可自动快速读出中国二代身份证上的信息(姓名、性别、民族、住址、身份证号码)并截取到身份证图像
二、应用场景:身份证号码采集:信用卡网申、商户进件、实名认证

三、原理:

3.一、自定义相机并利用第三方库SDK libexidcardios 进行识别

3.二、添加自定义的扫描界面(中间有一个镂空窗口和来回移动的扫描线)

3.三、人脸小框检测:人脸区域是否在这我的脸小框内,若在,说明用户的确将身份证头像放在了这个框里,那么此时这一帧身份证图像大小正好合适且完整,接下来才捕获该帧,就得到了完整的身份证截图。

四、原理文章

  • 扫描银行卡识别信息:

下载Demo源码
一、功能:扫描银行卡识别信息( 银行名称、 银行卡号)并截取银行卡图像

二、应用场景:快速填充银行卡号的场景,好比商户进件、实名认证

三、原理:

3.一、自定义相机并利用第三方库SDK libexbankcardios.alibbexbankcard.a进行识别(识别次数无限,免费)

3.二、添加自定义的扫描界面(中间有一个镂空窗口和来回移动的扫描线)

四、原理文章

五、若是没法下载Demo,请关注公众号:【iOS逆向】,进行获取
iOS支付项目实践专栏- 总目录(持续更新)_应用场景_07

iOS 自定义相机进行银行卡/身份证信息识别方案

一、下载demo源码
二、原理:自定义相机采集银行卡图片,调用SDK/API进行OCTR识别

三、文章地址

四、应用场景:实名认证、银行卡绑定、信用卡网申

五、思路

5.一、自定义相机识别银行卡/身份证信息的付费方案思路:
将CVImageBufferRef转UIImage以后,可直接调用第三方接口进行OCR

  1. 二、自定义相机识别银行卡/身份证信息的免费方案思路:
    直接利用libexbankcardios.a和libbexbankcard.a 第三方库的API解析CVImageBufferRef中的银行卡号信息,进而根据卡并规则获取银行名称

1.9 收银app必备模块:iOS折扣计算器

采用NSDecimalNumber 进行表达式的精准计算(计算字符串数学表达式)

一、原理文章

二、背景:以前使用NSExpression 进行表达式的计算,发现一个问题:没法精准小数点位数(1+65 和65+1 的精度就不同)

三、解决方案:采用的是NSDecimalNumber 进行计算

四、下载地址

1.10 通信录

iOS处理语言工具CFStringTransform : 智能地处理用户的输入内容,经典应用场景【索引】

 

一、原理:经过对用户输入内容,利用CFStringTransform变换,能够轻松实现实现一个通用的搜索index

二、 特点:搜索内容能够是多语言的

三、文章

1.11 限定文本输入框输入特定的字符个数

iOS支付项目实践专栏- 总目录(持续更新)_ios_08

一、原文
二、主要功能:限定文本输入框输入特定的字符个数,

文本长度计算规则:中文占1,英文等能转ascii的占0.5

三、特点功能: iOS限制联想字符串输入,汉字占2个字符,英文占1个字符,解决的中英文切换输入法联想致使的bug

四、demo需求:风险商户处理界面提供状况说明输入框,限制输入100个字符

五、private repositories : https://github.com/zhangkn/RestrictedInputDemo

六、demo项目采用MVVM进行实现

iOS支付项目实践专栏- 总目录(持续更新)_自定义_09

1.12 iOS商品类目选择视图

 

iOS 商品/经营类目选择视图

 

下载地址

文章地址
视频地址
商品经营类目选择视图的应用场景:
一、发布商品时选择商品类目

二、商户进件选择经营类目

三、购物类app下单界面的商品类目筛选

在发布商品的时候,选择类目界面的要求视图分为上下部分。

一、 上部分:展现已经选择的类目信息,并清晰的从上倒下罗列对应层级类目信息(悬浮),点击类目的时候,下部分的展现的类目信息切换为同级类目信息供选择。

二、 下部分:展现可供选择的类目信息(支持滚动选中类目)
iOS支付项目实践专栏- 总目录(持续更新)_类目_10

支持清空数据功能

iOS支付项目实践专栏- 总目录(持续更新)_类目_11

1.13 iOS 自定义tab滑块

segment功能+label混合显示;( Slider 双区间)【应用场景:商户交易汇总表使用tab滑块进行切换/筛选不一样级别的代理商数据】

————————————————
版权声明:本文为博主「#公众号:iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处连接及本声明。

iOS 自定义tab滑块

 

iOS支付项目实践专栏- 总目录(持续更新)_应用场景_12
下载Demo

原文

视频地址

需求商户交易汇总表使用tab滑块进行切换/筛选不一样级别的代理商数据

应用场景:商户交易汇总表使用tab滑块进行切换/筛选不一样级别的代理商数据

II 语音播报 & 国际化

2.1 iOS12.1以上在后台或者被杀死没法语音播报的解决方案

iOS NotificationServiceExtension实现VoiceBroadcast【app处于后台/被杀死的状态仍可进行语言播报】iOS12.1以上在后台或者被杀死没法语音播报的解决方案

————————————————
版权声明:本文为博主「#公众号:iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处连接及本声明。

资源下载源码

2.2 APP 内的国际化切换

从CSDN下载【iOS APP 内的国际化切换】demo源码

文章:
原理:
一、自定义解析本地化字符串的工具类LanguageManager

二、应用内切换语言生效的技术实现:采用销毁根控制器,从新进入一次

三、本地化字符串指定参数顺序

III 蓝牙打印商品价格标签、交易小票

一、应用场景:打印商品价格标签、打印交易小票
二、特点功能: 实现自动链接最近使用的打印机、统一处理蓝牙状态

三、原理文章

四、解决的问题:人民币¥符号乱码的问题
private

IV 、iOS安全资源

4.1 参数签名

iOS app侧对请求参数进行签名:【请求参数按照ASCII码从小到大排序、拼接、加密】(递归的方式进行实现)

一、下载demo地址

二、文章

三、应用场景:防止请求参数被恶意修改

4.2 敏感逻辑的保护方案

案例:js根据key从本地方法获取设备及签名信息 (完整demo)

在OC本地方法封装签名方法,签名方法采用C语言实现,并把函数名隐藏在结构体里,以函数指针成员的形式存储,这样编译后,只留了下地址,去掉了名字和参数表,提升了逆向成本和攻击门槛.

2021-04-14 17:28:28.762113+0800 SignWithjsKey[23919:2084235] getGyqAppParams: {"api_version":"v1.1.4","appid":"3","time":"1618392508","operator":"中国电信","user_id":"https:\/\/kunnan.blog.csdn.net\/","vn":"1.0","device_id":"b8eeff0f1612d4b9fba63ba7b47dbf27","channel":"default","device_name":"iPhone8,1","os":"iOS","sign":"b2ad581d2e30730f3aed506fc7593957","openudid":"0dce01d7424ac836d33ef49e20019e920e847e96","token":"#公众号:iOS逆向","root":"1","idfv":"-D089-4021-82A9-65D8E400C711","height":"1334","width":"750","xyz":"0.006973,0.007675,-1.009369","os_version":"14.0","network":"no_network","vc":"1","idfa":"-3693-4940-BEAD-93C59E53FA55"}

下载Demo

一、应用场景:签名函数

二、原理:为了提升代码的安全性,能够采用把把函数名隐藏在结构体里,以函数指针成员的形式存储。 编译后,只留了下地址,去掉了名字和参数表,提升了逆向成本和攻击门槛.

三、文章

4.3 基于NSURLProtocol拦截全部网络请求

iOS支付项目实践专栏- 总目录(持续更新)_ios_13

下载demo资源

一、文章

二、应用场景:

2.一、 自定义请求头的HTTPHeaderField

2.二、针对NSURLSessionConfiguration设置代理IP和端口,让一些特殊的请求走自定义的隧道IP和端口

2.三、对网络请求的数据进行报文级别的加密:使用NSURLProtocol来自动监听HTTP请求并加密解密。
经过[NSURLProtocol registerClass: [NetworkInject class]];注入了自定义的NSURLProtocol类

三、原理:利用NSURLProtocol 拦截 HTTP 请求
基于NSURLProtocol实现iOS应用底层全部网络请求拦截(含网页ajax请求拦截【不支持WKWebView】);

四、特点功能:http-dns解决方法,有效防止DNS劫持。
会直接从本地或特定服务器地址进行DNS解析,是一种避免DNS劫持的措施
https://github.com/zhangkn/KNURLProtocolDemo

V、 逆向

5.1 IPC

iOS AppStore Search optimize【Inter process Communication】之 去掉对rocketbootstrap的Depends依赖

一、下载地址

二、文章

三、目的:是想在本身的deb 自带rocketbootstrapd,避免每次部署都从bigBoss 源更新。

四、相关文章:iOS AppStore Search optimize【 ASO项目使用的技术】之 Inter process Communication By Rrocketbootstrap
————————————————
版权声明:本文为博主「#公众号:iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处连接及本声明。
原文连接

5.2 分析如何调用的ptrace,并hook ptrace

下载完整Demo

 

二、private 仓库

三、文章

四、去掉ptrace的思路:

4.一、 当程序运行后,使用 debugserver *:1234 -a BinaryName 附加进程出现 segmentfault 11
时,通常说明程序内部调用了ptrace 。

4.二、为验证是否调用了ptrace 能够 debugserver -x backboard *:1234 /BinaryPath(这里是完整路径),而后下符号断点 b ptrace,c 以后看ptrace第一行代码的位置,而后 p $lr 找到函数返回地址,再根据
image list -o -f 的ASLR偏移,计算出原始地址。最后在 IDA
中找到调用ptrace的代码,分析如何调用的ptrace。

4.三、开始hook ptrace。

5.3 进程间的实时通信方案

local socket(解决扩展和容器应用的实时通信问题)

一、下载地址

二、原理文章

采用Local Socket方案(TCP)建立服务端和客户端从而达到通信效果。

三、应用场景:解决扩展和容器应用的实时通信问题

VI、iOS中tabBar按钮再次点击实现界面刷新

 

iOS中tabBar按钮再次点击实现界面刷新

 

  • 本文的demo 案例功能:

一、当进入首页时提示用户再次点击tabBar可刷新界面数据

二、刷新数据当同时旋转tabbar的图片

一、文章地址

二、应用场景:适用于购物类app的首页tabBar,以及购物券类app的首页tabBar

三、特点功能:在更新数据期间旋转tabbar的icon

 

VII 、HTML字符串与富文本互转

HTML字符串与富文本互转(加载本地html) demo 源码

一、下载地址

二、文章

三、、应用场景:使用原生视图UILabel显示服务端返回的带有HTML标签的内容
iOS支付项目实践专栏- 总目录(持续更新)_ios_14

VIII、iOS开发效率工具

8.1 封装富文本API

【封装富文本API,采用block实现链式编程】(block 的妙用:结合block和方法的优势实现iOS的链式编程)

一、原理文章
block 的妙用:结合block和方法的优势实现iOS的链式编程

二、功能:主要针对段落样式NSMutableParagraphStyle和富文本NSMutableAttributedString进行封装,提高开发效率

三、下载地址

see also

推荐一个iOS开发的公众号:【iOS逆向】,号主擅长iOS,有8年开发经验,曾参与中国移动和包项目的开发,博客专家(移动开发领域新星创做者)

博客专家(移动开发领域新星创做者):

公众号:iOS逆向(code4iOS)

iOS支付项目实践专栏- 总目录(持续更新)_ios_15

 

dto(Data Transfer Objects): 接口返回的原始数据

什么是API规则、ABI规则?

如何去定义一个函数,如何去实现一个函数,如何去调用一个函数,如何将参数传递给被调用的函数,如何使用被调用者函数的返回这些都须要有统一的标准规范来进行界定,这个规则有两个层面的标准:

  • 在高级语言层面的规则称之为API规则;
  • 而在机器指令层面上则因为不一样的操做系统以及不一样的CPU体系结构下提供的指令集和构造程序的方式不一样而不一样,因此在系统层面的规则称之为ABI规则。

热修复服务

https://www.volcengine.com/docs/6363/69074