Tag: 如何

集成PayFort-我们受了苦,所以您不必

您认为您的客户要求您集成由Amazon构建的在线支付网关时,您将会取得丰硕的成果。 这就是我的主要iOS开发人员(Tahir Pasha)在回应这张票时告诉我的:“因此,我将创建一个沙箱帐户,按照其文档中所述集成SDK,对其进行测试,然后切换到生产环境,就是这样” 从此链接获取文档, 此处的iOS SDK。 从您的沙盒帐户复制商家ID和访问代码, 在集成设置中,设置创建签名所需的REQUESTPHRASE 创建此链接上所示的签名, 您需要从SDK令牌URL获取SDK令牌,如文档第5.3节所示。 现在,通过该SDK令牌,您可以在移动应用中使用SDK来根据首选付款方式处理付款。 简单? 没有。 完成所有这些步骤并将您的应用提交审核后,您将遇到以下问题。 服务器端认证 将您的应用提交审核后,只有Payfort集成团队的人员才会通知您,您需要在服务器端而非移动应用上进行身份验证并获取SDK令牌。 因此,现在您需要在服务器端重做步骤5和6 。 从上面的步骤5:如服务器端此链接上所示创建签名,为此签名,您还将需要用户的设备ID 从上面的步骤6:从服务器公开一个API,该API接受来自移动设备的设备ID,如上所述创建签名,从Payfort请求SDK令牌,然后在响应中将该令牌提供给移动应用程序。 (ps,因为此代码与其余的后端体系结构无关,所以如果您为此独立于后端创建单独的微服务,则更好) 第7步将与上面相同,因为一旦在移动应用中安装了SDK TOKEN,您就可以执行与之前相同的其余任务。 直接交易反馈网址 您还需要配置直接交易反馈URL,Payfort将在其中处理交易后将响应参数发送给您。 Payfort说,如果用户由于互联网连接断开或他关闭了浏览器或者问题出在您身边作为连接商而导致用户重定向到您的return_url之前关闭了浏览器,Payfort会向您发送响应作为此URL上的POST表单。 这个想法很好,但是唯一的问题是Payfort希望您无需任何身份验证即可公开此POST api。 这会为您的数据库打开一些安全威胁。 因此,您需要创建另一个单独的微服务,它具有自己的私有数据存储,该数据存储仅处理这些响应(独立于您的主数据库),而没有其他处理。 即便如此,将这个api中接收到的信息与您的实际数据库合并也是另一个问题。 调试 调试PayFort提供的错误消息是另一个挑战。 例如: 错误代码001:他们的文档说这意味着“缺少参数”。 它没有指定缺少哪个参数。 进入生产 您会想象,当payfort将您的帐户从沙箱转移到生产环境时,他们也会为您移动所有设置。 但是不会,一旦您解决了上述所有问题,并且您的帐户已获准用于生产,则需要手动激活所需的付款方式。 然后,当您再次认为自己已经完成时,您可能还会面临最后一个问题 回购 是的,你没看错。 在一种情况下,如果在Payfort的末端处理付款时发生错误,或者用户决定在处理付款时取消付款,则Payfort API会给您一个回单而不是响应。 在所有其他api中为您提供消息的键称为“ response_message”,而在此特定api中,该键为“ resposne_message”。 我们花了几个小时才弄清楚这一点! 您还需要在您的应用程序中处理此拼写错误,否则它将崩溃 现在完成了 最后,我必须说,一旦设置好,Payfort是一项出色的服务,它的工作确实比我们上一个付款处理者做得更好。 与塔希尔·帕夏(Tahir Pasha)共同撰写 …………。 更新2019年1月10日 […]

如何分割字符串— Swift 3.0

当我尝试通过使用for-in循环遍历字符串来拆分字符串时,不断出现以下错误: 尽管此错误告诉我,与数组不同,无法使用for-in循环拆分字符串,但它未提供有关如何修复错误的指导。 自然,我从Stackoverflow寻求帮助。 在下面,您将找到我搜索的结果:两种分割字符串的方法……。 选项1:在要拆分的字符串的末尾添加.characters 。 在下面的示例中,循环遍历字符串,并逐个字符(包括空格)对其进行拆分。 最终结果: 正如您在左侧看到的那样,使用.characters可以拆分字符串中的单词以及每个单词中的字母。 根据最终目标,返回字符串中每个单词的每个字符可能会造成一些混乱。 但是,当您想更改字符串中的每个字符时,使用.characters拆分字符串很有用。 在下面的示例中,我使用.characters将stringOfWords中的每个字符(包括空格)替换为图像(“🦄”)。 最终结果: 选项2:使用components(separatedBy 🙂创建一个数组,其中包含要拆分的字符串中的每个单词。 在下面的示例中,字符串中的每个单词都分成一个数组,然后可以使用for-in循环进行迭代。 最终结果: 当目标是以相同方式更改字符串中的每个项目(或本例中的单词)时,此选项很有用。 例如,在下面的示例中,我使用components(separatedBy 🙂将stringOfWordsArray中的每个单词更改为Pig Latin。 我不希望每个字符都发生变化,而是希望每个单词在每次迭代过程中都以相同的方式进行更改(将原始单词的第一个字母移动到单词的末尾并添加“ ay”)。 最终结果: 在决定使用.characters还是component(separatedBy :)时 ,问自己“为什么拆分字符串? 我的最终目标是要更改/使用字符串中的每个字符 ,还是要更改/使用字符串中的每个单词 ?”如果答案是前者,则应使用.characters 。 相反,如果是后者,则可以使用components(separatedBy 🙂 。 以下有用的链接…。 components(separatedBy 🙂 — Stackoverflow 获取字符串的第n个字符-Stackoverflow 字符串和字符概述-Apple的Swift编程语言(Swift 3)

如何在Mac上正确卸载应用

卸载Mac应用程序是最简单的操作。 您只需从应用程序文件夹中选择要卸载的应用程序,然后将其拖到垃圾桶中,然后清空垃圾箱中提琴即可! 你完成了。 您可能想知道为什么我在这里告诉您呢? 这是一个很好的问题。如果我告诉你,你一直做错了怎么办? 应用程序具有支持文件和相关性,当您简单地将应用程序拖放到垃圾箱中时,您不会完全删除其支持文件并缓存文件,这就是我在这里向您展示的内容。 我将展示如何清理应用程序支持和缓存文件。 使用App Cleaner删除支持文件 如果您的Mac上未安装App Cleaner ,请转到mac应用商店并进行安装。 它是完全免费的。 安装应用程序清洁器后,将其打开, 首次打开应用程序清洁器时,它将在Mac中显示所有安装的应用程序及其内存大小。 选择要卸载的应用程序,它的应用程序支持文件,缓存和首选项文件将显示在右侧。 勾选右侧的所有文件 ,然后按“ 删除服务”文件 ,然后按“ 删除”进行确认 这将删除该特定应用程序的所有支持,缓存和首选项。 毕竟,现在您可以将应用程序拖到垃圾桶中并清空它。 手动清理支持的应用程序并缓存文件 如果您不想使用第三方应用来清理您的Mac,那不是火箭科学,您可以手动完成。 让我们开始吧。 单击Mac屏幕左上方的apple徽标,然后选择“关于此mac”。 然后选择存储。 这将显示Mac上的可用和已用内存空间。 在右上角,您将看到一个名为管理的按钮,单击它。 这将打开文件浏览器。 这将打开系统信息窗口。 从窗口: 选择文件 点击文件浏览器 转到应用程序支持文件 查找与您要卸载的应用程序相关的文件夹,并将该文件夹放入回收站。 重复#3和#4,您需要第二次访问缓存而不是应用程序支持文件。 从“ 应用程序支持和缓存”文件中清除与要卸载的应用程序相关的所有文件之后,现在可以将要卸载的应用程序拖到垃圾箱中并将其清空。 仅此而已,现在您可以从Mac正确卸载应用程序。 如果单击本教程,请鼓掌。

在iPhone上清除历史记录的有效方法

清除iPhone中的历史记录是提高性能和个人隐私的好习惯。 通话记录,浏览记录,消息记录等。 在本文中,我将指导您如何清除iPhone中的所有历史记录。 清除通话记录 打开您的手机应用程序,然后选择标签“最近”。 标签“编辑”,它将出现呼叫记录。 然后,点击“清除”以删除所有通话记录。 2.清除消息历史记录 信息很重要,有时您需要删除信息以保护个人隐私。 有时您需要保存您的消息。 因此,在这种情况下,请考虑是否应该删除或保存。 这是您自己的选择。 转到消息应用程序,然后选择“编辑”。 选择要删除的保护,然后选择“删除”。 如果要自动清除消息历史记录,可以更改这些设置。 转到“设置”,然后选择“消息”。 然后,选择“保留消息”,然后选择要保留消息的时间。 我建议您选择30天。 3.清除键盘历史记录 转到设置,然后选择“常规”标签。 标签“重置”,它将显示重置选项。 选项卡“重置键盘字典”,然后将要求您确认。 此设置将删除您保存的自定义单词。 4.清除Safari浏览历史记录 此设置将删除Safari浏览器中保存的所有信息或cookie。 转到设置并标签“ Safari”。 然后,点击“清除历史记录和网站数据”。 将出现确认面板,并显示“清除历史记录和数据”选项卡。 现在,所有的cookie,浏览历史记录,缓存和自动填充信息将被删除。 此效果将反映在您使用自己的iCloud帐户登录的任何Apple设备上。 5.清除Google搜索记录 使用Google搜索服务的最简单方法是使用Google搜索应用。 大多数用户不会在其浏览器中使用Google搜索,而是通常与Google Search App一起使用。 如果您在iPhone中使用Google搜索应用,则需要清除浏览历史记录。 在iPhone中打开您的Google应用,然后点击“设置”。 标签“隐私。 标签“浏览”选项,然后将出现“历史记录”部分页面。 标签“清除设备上的历史记录。 备注:此设置只会删除您iPhone上的搜索历史记录。 它不会在Google帐户上删除。 您的搜索记录仍保存在Google帐户中。 6.清除所有数据 此选项将删除iPhone中的所有历史记录和数据。 要注意自己。 转到设置并标签“常规”。 标签“重置”选项,然后标签“清除所有内容和设置”。 请稍等片刻以重置您的iPhone。 重置完成后,您必须选择初始设置。 您可以设置为新iPhone,从iCloud备份还原,以及从iTunes备份还原。 这是您自己的选择。 如果必须将iPhone保留为出厂设置,建议您将其设置为新的iPhone选项。 结论 […]

如何在没有电缆的情况下(无头)使用Ubuntu 16.04设置Raspberry Pi 2/3

我正在研究一个机器人项目,该项目的核心是具有Ubuntu最小(无GUI)和Swift 3.0的Raspberry Pi。 普通Ubuntu的问题在于,它要求您具有监视器,键盘和鼠标。 所有这些都给您带来不便,我很乐意通过将其插入机器来完成所有操作。 可悲的是,这是不可能的。 经过一些试验,我已经能够实现这一目标。 接下来是这个强大的书呆子的故事。 步骤1:准备 获取Raspberry Pi 2或3,具有8Gb或更多内存(10类或更多)的SD存储卡,微型USB电缆(用于供电),以太网电缆和Wifi USB软件狗。 第2步:在SD卡上最少刷新Ubuntu 16.04服务器 从此处或此处下载Ubuntu服务器经典版。 这是Ubuntu服务器的一种风格,已从并非严格必需的所有内容中删除了它,因此它非常轻便。 现在,您必须刷新SD卡上的图像。 在网络上,您会发现很多多步骤命令行指南。 但这很疯狂,因为有一个很棒的应用程序,叫做Etcher.io,可以使流程变得异常简单,快速和安全。 下载Etcher应用程序(适用于所有平台),然后选择Ubuntu映像,SD卡(您必须将其插入计算机中)并进行刷新。 几分钟,它将完成并验证。 将SD卡放入RPi,您就可以摇滚了! 步骤3:将Rsh插入RPi 将新备份的SD卡插入RPi之后,请在RPi与路由器之间连接以太网电缆。 通过将Micro USB电缆连接到电源或计算机上,打开RPi。 请耐心等待几分钟,因为首次启动的时间比平时长。 然后打开路由器的仪表板,查看与以太网连接的设备。 您将看到设备主机名ubuntu-minimal 。 记下该设备的IP。 打开您的终端并输入: ssh ubuntu @ THE_IP_YOU_JUST_FOUND (密码ubuntu) 你应该在里面! 现在,您已通过网络连接到RPi。 唯一的问题是,您仍然需要通过以太网电缆将RPi保持与网络的连接。 但是,让我们解决这个问题。 步骤4:走向无线 首先,我们需要更新操作系统: sudo apt-get更新 sudo apt-get升级 安装wifi支持: sudo apt-get install wireless-tools wpasupplicant 现在重启。 […]

使用Swift创建自定义UITableViewCell

在 programmingwithswift.github.io上 查看我的其他帖子 UITableViews是iOS开发中最常用的视图之一。 大多数时候,您会想创建自定义UITableViewCells,因此在本教程中,我将向您展示如何创建自定义UITableViewCells。 在开始之前,我假设您已经有一个UITableView设置。 步骤1:建立新的Cocoa Touch类别 步骤2:设计单元 对于单元格设计,我将将高度设置为60,然后添加UITextField和UIButton。 稍后,我们将它们连接到UITableViewCell视图类。 将高度设置为60,请参见下图: 然后将UITextField和UIButton拖放到该视图中。 这就是我的风格。 下面是UITextField约束设置的图像: UIButton约束如下: 步骤3:向UITableView注册新的自定义UITableViewCell 注册新的自定义表格视图单元格。 在用于表视图的视图控制器中添加一个名为registerTableViewCells()的函数。 确保您有权访问表格视图。 您将需要使用tableview来注册新单元格。 您的函数应如下所示: 此代码正在注册一个新的自定义UITableViewCell。 在第一行中,我们创建一个新的UINib实例,第一个参数是nibName。 这必须是您创建的新单元格的名称,即文件名。 在第二行中,我们告诉UITableView我们要向其注册哪些新的自定义单元格,我们需要传递之前在该行中创建的UINib实例,然后需要为新单元格提供重用标识符。 在这种情况下,我只是使用文件名作为重用标识符,但是您可以根据需要提供任何名称。 步骤4:调用registerTableViewCells方法 为了调用上面创建的函数,我在viewDidLoad()函数中对其进行了调用。 我的viewDidLoad()函数如下所示: 步骤5:更新CellForRowAtIndexPath函数 为了使用新的单元格,您需要将以下代码添加到cellForRow委托方法中 只要确保使用您为类命名的名称和重用标识符来更新标识符和类名即可。 就是这样! 现在,您可以运行该应用程序,并且应该会在表格视图中看到自定义的UITableViewCell。 现在我们只需要在新单元格上连接UITextField和UIButton。 连接这些控件时,我们要做的只是打印您在文本字段中键入的文本。 步骤6:为UITextField和UIButton创建出口和功能 在此步骤中,您将需要创建您的商店。 我在下面提供了一张图像,该图像显示了我所做的事情。 完成创建网点后,您将需要创建一个新功能,如下图所示。 此函数将从文本字段获取值。 您现在应该可以运行该项目。 运行它时,应该显示一个自定义UITableViewCell。 您还应该能够在文本字段中键入一些内容,当您点击按钮时,它应该在Xcode的控制台中打印您在文本字段中键入的任何文本。

SwiftSpringBoard:实现iOS主屏幕布局

SwiftSpringBoard是一个旨在重现iOS主屏幕图标配置和功能的项目。 对SwiftSwiftBoard的需求来自我们的一位客户,该客户在其iOS应用程序的主屏幕上使用集合视图。 该客户愿意提供Apple风格的主页按钮重新排序功能以及隐藏单元格的功能。 我们需要一个能够完成以下功能的组件: 以与在iOS主屏幕上显示应用程序相同的方式呈现项目 在屏幕的一个或多个页面上对元素进行重新排序(通过拖放) 从屏幕上删除元素 我们要做的第一件事当然是查找可以满足我们需求的可用框架。 如果您自己这样做,您可能会得出与我们相同的结论:首先,很少有框架与我们的目标相关,其次,截至2017年11月,大多数可用工具尚未得到更新。至少两年。 我们的库依赖于4种类型的对象: SpringBoardView:显示主屏幕样式项的视图(UICollectionView的子类) SpringBoardManager:实现视图行为核心逻辑的对象 SpringBoardDataSource:应用程序用来设置组件的协议 SpringBoardLayout:视图使用的自定义布局(UICollectionViewFlowLayout的子类) 为了最大程度地减少麻烦和不必要的重新实现(并最大程度地了解世界各地的知识),SwiftSpringBoard组件主要使用UICollectionViews中的标准行为:自iOS 9.0起,UICollectionViews本身就可以提供适合基本功能的重新排序机制需要。 此外,自iOS 2.0起,UIScrollViews即可使用分页。 这些功能结合在一起,为我们满足需求提供了坚实的起点。 我们设计了SpringBoardDataSource协议,以便经典UICollectionView机制的用户不会迷路。 首先,用户必须设置其跳板将在单个页面上使用的列数和行数。 为此,用户必须实现以下方法: 对于水平滚动,将逐列加载项目: 问题是,由于主屏幕中的分页是水平进行的,因此我们必须坚持水平滚动。 但是,正如您所看到的,垂直滚动将项目放置的方式与预期放置首页项目的方式相同。 因此,我们必须以垂直布局的方式自己计算项目位置。 计算项目位置本身意味着要处理项目的创建和删除,否则我们将保留对无用变量的引用,这些变量在使用UIKit的默认组件时肯定会导致崩溃,并且我们不会意识到将新项目添加到视图中,这意味着它们永远不会被显示。 布局还必须处理无法完全填充的页面,这是我们在主屏幕上可以看到的行为。 经过大量故障排除后,我们成功处理了布局及其几次更新。 但是组件的部分逻辑仍必须由用户处理,因为他是唯一可以完全访问加载在弹簧板上的原始数据的用户。 假设您的跳板数据由存储在一个名为dataContent的主数组中的数字数组组成 。 您对SpringBoardDataSource的实现应如下所示: 到目前为止,我们打算改进SwiftSpringBoard的几种方法包括: 动态列和行计数:这将是我们的下一个发展。 从今天起,用户必须手动设置其行数和列数以用于布局以正确计算尺寸。 我们希望仅基于布局的插图和间距属性以及项目的固定大小来自动计算行数和列数。 处理文件夹:尽管用户已经可以实现此行为,但我们正在寻找一种干净简单的方法将此功能添加到我们的库中。 一种选择是为打开的文件夹创建SpringBoardView的另一个实例。 如果您碰巧使用了我们的组件,我们真的会对您将如何使用它感到好奇。 如果您有任何问题/建议,请随时与我们联系。 Wassa是室内定位和计算机视觉领域的创新数字代理专家。 无论您是想帮助客户在建筑物中找到自己的出路,增强产品的用户体验,收集有关客户的数据还是分析某个地点的人流量和行为,我们的创新实验室都将科学的专业知识带给您最大的设计灵感根据您的目标调整解决方案。 在 – 找到我们: Facebook和Twitter 领英 的GitHub 我们的网站