Tag: 应用程序购买

React Native –从零开始到App Store

计划 应用程式创意 使用的技术 开发环境 应用结构 打字稿介绍 付款介绍 推送通知简介 介绍持久性Redux存储 苹果评论修复 最重要的提示 结论 应用程式创意 一年前,我搬到柏林,面临非常不同的挑战。 每当您需要与当地行政办公室进行互动时,都需要预约。 这就是问题所在,通常最接近的可用约会日期是一个月,但是如果您很幸运并且有足够的空闲时间整天刷新包含可用约会的页面,则可以在下周获得一个。 但这不是我们的方式,我和我的朋友决定将其自动化。 使用的技术 反应本机 React Native· 使用React构建本机应用程序的框架 使用Reactfacebook.github.io构建本机应用程序的框架 打字稿 TypeScript –可扩展的JavaScript。 TypeScript为您带来了可选的静态类型检查以及最新的ECMAScript功能。 www.typescriptlang.org Redux 自述文件·Redux 如果您来自Flux,则需要了解一个重要的区别。 Redux没有… redux.js.org I18n i18next / react-i18next react-i18next-国际化的反应正确。 使用i18next i18n生态系统。 github.com “ redux-persist”模块 rt2zz / redux-persist redux-persist –坚持并补充redux存储库 github.com 后端API的Node.js(本文未涵盖) 二手平台功能: 推送通知 应用内购买(可续订) 开发环境 React […]

iOS 12上的沙盒测试登录

尝试在iOS 12上测试应用内购买时无法切换帐户? 我要么……直到我意识到苹果需要更新他们的文档! 我正在使用“应用内购买”(定期订阅)来开发我的第一个iOS应用。 显然,我想对此进行大量测试,因此,我阅读了有关使用沙箱帐户测试IAP的Apple文档: 如果我按照这些说明进行操作,则当我尝试进行购买时,系统会提示我输入登录到手机的主要Apple帐户的密码,并且无法选择使用其他帐户登录。 我在任何地方都找不到此文档,但是事实证明,现在在“设置-> iTunes和App Store”底部有一个“沙盒帐户”,您可以在其中输入沙盒凭据。 我最终偶然地偶然发现了这一点: Apple的文档中显然缺少一个步骤:在App Store设置的“沙箱”部分中登录您的沙箱帐户。 购买时提示您登录的说法是不正确的,具有欺骗性。 希望这可以节省别人花费我的无聊时间!

从头到尾在Swift中为iOS进行本地收据验证

Swift中的本地收据验证似乎没有被广泛介绍。 我已经能够找到分散在Internet上的代码片段,但是没有什么可以将所有内容集中到一起,因此我可以全神贯注于整个过程。 我一直在研究一些代码,这是我从头到尾将所有内容组合在一起的尝试。 我编写了7篇指南,从入门到测试收据验证,一直到处理收据验证过程的结果以启用/禁用您的应用程序功能。 此外,我已将所有代码放入新的GitHub存储库中,供您使用和学习! 只需要代码? 干得好! andrewcbancroft / SwiftyLocalReceiptValidator SwiftyLocalReceiptValidator – Swift中用于iOS的本地收据验证逻辑的实现 github.com 如果您有兴趣了解整个过程中的每个步骤,那么以下是我针对Swift中的本地收据验证主题编写的七本指南: 准备针对iOS的测试收据验证 适用于iOS和Swift的OpenSSL简单方法 使用Swift加载收据进行验证 使用Swift提取PKCS7容器进行收据验证 收据验证—在Swift中验证收据签名 收据验证-使用Swift分析和解码收据 在Swift中完成收据验证-计算GUID哈希 防止软件盗版很难。 这些指南中提供的代码以及在Git存储库中共享的代码并不旨在保护您免受未经授权使用您的应用程序或其功能的侵害。 这些指南和代码旨在用于学习目的,并且可能是您自己实施本地收据验证的起点。 如果您在应用中按原样使用此代码,则后果自负。 您必须付出额外的努力来混淆此处提供的代码,以阻止攻击者绕过该存储库中包含的收据验证逻辑的尝试。 最初于 2017年8月1日 发布在 www.andrewcbancroft.com 上。 安德鲁·班克罗夫特(Andrew Bancroft)是Pluralsight上多个与iOS / Swift相关的课程的作者。 他定期在www.andrewcbancroft.com和www.dataday.life上撰写博客,热衷于学习和发现,并喜欢与他人分享新见解。 安德鲁(Andrew)用@andrewcbancroft推特介绍了软件开发和数据科学。

在没有钥匙串和UserDefaults的情况下实施应用内购买

每个开发人员最终面临的应用内购买实施步骤之一是选择合适的购买记录持久性策略,这将使应用重新启动后可以访问付费内容。 坚持购买的最明显方法是在UserDefaults中存储一些值,该值将指示某些内容是否已解锁。 Owen Brown和Pietro Rea在UserDefaults上的两个教程中展示了这种方法,其中UserDefaults用于存储布尔标志以指示非消耗性产品的购买状态,以及Date实例以保留订阅到期日期。 由于缺少数据完整性保护,因此通常会批评这种解决方案,因为UserDefaults存在的内容作为普通二进制plist存储在应用程序捆绑包的“首选项”文件夹中,因此用户可以使用iMazing,iFunBox或iExplorer等软件进行编辑由AndrésIbañez在他2014年的帖子中展示。 尽管这是事实,但我想提一下,自从iOS 8.3开始,Apple在文件系统访问中引入了严格的权限限制,从而消除了从非越狱设备上从外部访问应用程序内部文件的权限。 说到越狱,值得提醒的是,近几年来它的流行性一直在下降,以至于先驱者说越狱已经死了。 从个人观察,我可以说,为最新的iOS版本发布越狱需要花费更多的精力。 从iOS 10开始,黑客至少需要6个月的时间才能越狱,普通的iOS用户可以使用。 这就是为什么我认为应用程序用户的任何重要部分篡改应用程序文件的机会都非常低的原因。 尽管如此,使用Keychain代替UserDefaults并不需要花费很多精力,如Axel Kee在他的帖子中所示。 原理是相同的-存储类似“购买”的字符串,作为购买产品的标识符。 值得一提的是,由于iOS 11(以及iOS 10.3 Beta)在卸载应用后会删除钥匙串中与应用相关的所有记录,因此,如果您希望在应用安装之间坚持进行应用内购买,则钥匙串将无济于事不再。 但是,还有另一种方法可以检查用户是否购买了某些东西,而无需依赖UserDefaults或Keychain而是使用收据,该收据在每次购买时都会由OS自动更新。 即使为此目的使用收据的想法已在Apple的“应用内购买编程指南”中明确记录,但似乎这种方法在第三方教程中并未引起注意。 造成这种情况的一个原因可能是这种持久性策略仅适用于非消耗性产品和自动续订的订阅。 如果您正在实施消耗性或非续订性订阅,那么您将拥有钥匙串或iCloud。 应用收据使用的第二个障碍是其复杂的结构,需要大量的技巧才能读取必要的信息。 Bill Morefield的教程很好地展示了在没有第三方依赖的情况下在Swift中读取应用收据所需要的内容。 值得庆幸的是,来自Cocoanetics的人们创建了一个Kvitto库,使使用应用程序收据的工作变得轻松。 最近,我使用应用程序收据作为购买的永久记录,在名为电子工程师助手的应用程序中成功实现了非消耗性购买和自动续订。 InAppPurchaseManager读取收据的方法如下所示: 该方法的前4行检查是否存在IN_APP_PURCHASE环境变量,该变量可在使用模拟器时轻松模拟各种应用内购买。 您可以在Axel Kee的这篇文章中阅读有关使用环境变量模拟应用内购买的更多信息。 该方法的其余部分只是通过比较产品标识符来解析收据以找到相关条目,并使用switch语句内的元组以及三元运算来返回适当的购买状态。 另一种值得签出的方法是paymentQueue(_:updatedTransactions:) : 在这种方法中,我仅将事件转发到BehaviorRelay (RxSwift库中的类),并在处理完所有交易后从应用收据中读取购买状态。 您可以在此要点中查看我的InAppPurchaseManager的完整代码。 多亏了RxSwift , Kvitto和应用程序收据,实现了应用程序内购买的实现并没有造成太大麻烦。