iOS内购IAP(In App Purchases)入门

2024-05-31 06:38
文章标签 入门 app ios 内购 iap purchases

本文主要是介绍iOS内购IAP(In App Purchases)入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

成为ios开发者最大的好处就是,你编写的应用程序会有很多方式可以赚钱。比如,收费版,免费挂广告版,还有就是程序内置购买。

程序内置购买会让你爱不释手,主要有以下原因:

  • 相比程序本身的下载收费以,你还可以赚更多的钱。一些用户愿意为那些额外的功能花费更多的金钱!
  • 你可以免费发布你的程序(这样的话,用户就可以任意下载了),如果他们喜欢这个程序的话,那么就会有人愿意购买额外功能。
  • 在你做完一个程序的时候,你可以在以后的发布版中添加更多的功能,然后这些功能可以用内置购买(这样的话,你就不用为获取更多的利益,再重新制作另一个程序了!)。


我最近正在制作的一个程序里面(Wild Fables,) ,我就决定先把程序免费(其中只包含一个故事),然后把更多的故事放在in-app purchase里面。
我最近正在制作的一个程序里面(Wild Fables,先睹为快!),我决定发布免费的应用,包括一个故事,更多的故事需要付费获取。

在这篇教程里面,你将会学到如何使用程序内置付费来解琐程序里面的本地内容。我将向您展示如何处理应用内购买棘手的异步问题。请谨慎采纳这些建议,因为我的程序也还在开发之中 —— 但是,随着我的知识的积累,我用我获得经验教训来更新教程内容,以确保不误人子弟!:]

这篇教程的前提条件你需要熟悉基本的ios编程概念。如果你还是一个ios开发新手,可以先参考 这些教程 。

In App Rage

那么,本教程将制作一个怎样的程序呢?好吧,在揭晓答案之前,我先介绍一些背景情况。。。

最近,我对 rage comics这玩意儿非常着迷,或者叫做 “F7U12″。如果你以前从没听说过它,它们实际上就是一些非常有趣的漫画,里面有些人非常搞笑和搞怪的人和事。

因此,这篇教程,我们想要叫做“In App Rage”的一个非常小巧的应用,在这个程序里面,用户可以使用内置购买来获得一些漫画。但是,在我们开始编码之前,我们需要先用ios Developer Center和iTunes Connect来为本程序创建一个入口点(a placeholder app entry)。

第一步,就是为这个程序创建一个App ID。所以,登录 iOS Developer Center,选择“App IDs”标签而,然后点击“New App ID”,如下图所示:

Creating a new App ID

你可以按照下面的截图,根据提示输入描述和bundle identifier:

Creating a new App ID, Step 2

注意,你应该使用自己独特的前缀来修改bundle identifier,使用你自己的域名(如果你有的话),或者如果都不可用的话,根据自己的名字或则其他的独特字符 你需要定义你自己的独一无二的identifier,通常的做法是把你的域名反过来写就行了,然后你也可以基于其它规则来制作啦。

当你完成的时候,点击Submit。好,恭喜你 —— 你现在有一个新的App ID了!现在,你将使用这个ID在iTunes Connect里面来创建一个新的应用了。

首先登录 iTunes Connect,点击“Manage Your Applications”,然后选择“Add New App”,并输入依次App Name,SKU number,同时选择你之前刚刚创建好的Bundle ID。
首先登录 iTunes Connect, 点击“Manage Your Applications”,然后选择 “Add New App”。并输入依次 an App Name, SKU number, 同时选择你之前刚刚创建好的Bundle ID,如下图所示:

Making a new app in iTunes Connect

你可能必须调整应用程序名称,因为,app名字必须是唯一的,而且我们之前为它添加了一个入口点(entry)。

接下来的两页将要求你输入你的应用程序的一些信息。现在,可以随便填一些内容 —— 之后可以更改内容。但不幸的是,每个带*号的文本框你都必须要填好(包括程序截图,甚至你现在还没有截图,呵呵,造一个吧)。

好吧,让你们看看我对于这个过程的感觉吧,请看下图:

iPhone Rage with iTunes Connect!

如果你像上面一样出错了,只需要随便填写一些数据就可以了(你可以使用任何图标或者截屏,只要大小合适就行了)。一旦你把所有的错误都解决完以后,你就大功告成啦,oh yeah!

管理 In App Purchases

在你开始编写in app purchase代码之前,你为此创建的placeholder应用程序,同时,你必须在iTunes Connet里面设置好。所以,现在你拥有placeholder应用程序,你现在只需要点击“Manage In App Purchases”按钮就行了,如下图所示:

Click Manage In App Purchases from iTunes Connect

然后,点击左上角的“Create New”,然后按照下图所示,填写相应的信息:

Enter information for In-App Purchase

让我们来解释下这几个文本域的含义吧:

  • Reference Name: 这个名字就是在iTunes Connect里面为相应的in-app purchase显示。这个名字你可以随便命名,因为在你的程序里面是看不到它滴。
  • Product ID: 在苹果的开发文档里面,这个也叫做“product identifier”,这是一个唯一的字符串,用来标识你的in-app purchase。通常的做法是,使用你的bundle id,然后在最后加一个唯一的字符串表示相应的purchase。
  • Type: 你可以选择non-consumable(购买一次,永久使用),comsumable(购买一次,使用一次),或者subscription(自动续款)。本教程中,我们采用non-consumables。
  • Cleared for Sale: 当应用程序可用时,这些in-app purchase就可以使用了。
  • Price Tier: 设置程序内置购买的价钱。

在你完成上面的设置以后,往下滚动鼠标,然后在Display Detail section部分添加一个English language entry,如下图所示:

Adding english language title and description for in-app purchase

稍后,当the in-app purchases可用的时候,当你查询App Store时,会向你返回一些信息。

您可能想知道为什么这一步是必要的(毕竟,你可以在你的应用程序中嵌入这些信息!)好吧,很明显Apple想知道你定的价钱嘛。同时,在App Store里面会根据你填写的这些东西来显示一些信息(比如,内置付费应用排行榜)。最后,如果你这一步设置了,你之后会变得很轻松。因为,它让你不用硬编码这些信息在你的代码之中。而且可以让你动态改变是允许内置购买还是禁止内置购买。

一旦你完成之后,保存entry,然后创建更多,和下面的截图效果类似。不要担心描述信息 —— 在本教程中我们并不会使用它们。

List of In-App Purchases to set up for this Tutorial

你可能会注意到,这个过程需要花费一段时间,我能够想象,当你的程序有很多内置购买“商品”时,这个创建过程会有多么的烦人!幸运的是,本教程我们体会不到,但是,如果你应用程序真的遇到了这种情况的话,画一个愤怒的漫画,发泄一下吧 :]

提取产品列表(Retrieving Product List)

在你能让用户从你的程序里面购买任何东西之前,你必须向iTunes Connect发送一个查询请求,从服务器上查询可用的产品列表。

我们可以直接在view controller里面添加代码来实现之,但是那样扩展性太不好了,不利于重用。取而代之,我们将创建一个辅助类来管理所有与in-app purchase相关的内容,然后你就可以在你的其它程序里面重用了。

在从服务器上获得产品列表的同时,这个辅助类还会跟踪是否购买了产品。它会将每个已经购买的product identifier保存在NSUserDefaults。

好了,让我们动手实验一下吧!打开XCode,然后选择File\New Project,再选择 iOS\Application\Navigation-based Application,点击Choose。把工程命名为InAppRage,然后点击Save。

接下来,创建IAPHelper类来管理内置付费代码。首先,右击Classes分组,选择File\New File,选择iOS\Cocoa Touch Class\Objective-C class,确保Subclass of NSObject被选中,然后点击Next。把这个文件命名为IAPHelper.m,通过确保“Also create IAPHelper.h” 被选中,然后点击Finish。

我们首先往IAPHelper.m里面添加从iTunes Connect检索产品列表的方法,代码如下:

- (void)requestProducts {self.request = [[[SKProductsRequest alloc] initWithProductIdentifiers:_productIdentifiers] autorelease];_request.delegate = self;[_request start];}

这个方法假设我们已经定义了一个实例变量,叫做 _productIdentifiers ,它包含了product identifiers列表,用来在iTunes Connect中查找(比如,com.raywenderlich.inapprage.drummerrage)。

它然后创建了一个SKProductsRequest实例,这个类是苹果公司定义的,它实现了从iTunes Connect里面提取信息的功能。使用此类灰常easy,你设置这个类的delegate(delegate 实现 SKProductsRequestDelegate中的协议方法),然后就可以调用start方法了。

我们设置IAPHelper类本身作为delegate,那就意味着,产品列表查询完毕时(productsRequest:didReceiveResponse),它会收到一个回调消息。我感到奇怪的是,由于一些原因购买没有成功,并获得错误的回调消息是,我不知道具体怎么处理,所以我稍后用超时处理这些错误 。

Update: erry 在论坛里面指出,SKProductsRequestDelegate协议是从SKRequestDelegate派生而来滴,而SKRequestDelegate协议有一个方法,叫做 request:didFailWithError:,当delegate实现这个方法的时候,你就获得购买失败的信息。如果你想的话,你可以用这个方法替代下面描述的超时方法,感谢Jerry!

好吧,接下来让我们来实现productsRequest:didReceiveResponse 方法吧,具体如下所示:

- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {NSLog(@"Received products results...");   self.products = response.products;self.request = nil;    [[NSNotificationCenter defaultCenter] postNotificationName:kProductsLoadedNotification object:_products];    
}

这个非常简单 —— 它贮存产品列表并返回(是一个SKProducts的数组),然后把request设置为nil(为了释放内存),然后发出一个通知,任何侦听这个通知的对象都会收到这个消息。

接下来添加初始化代码:

- (id)initWithProductIdentifiers:(NSSet *)productIdentifiers {if ((self = [super init])) {// Store product identifiers_productIdentifiers = [productIdentifiers retain];// Check for previously purchased productsNSMutableSet * purchasedProducts = [NSMutableSet set];for (NSString * productIdentifier in _productIdentifiers) {BOOL productPurchased = [[NSUserDefaults standardUserDefaults] boolForKey:productIdentifier];if (productPurchased) {[purchasedProducts addObject:productIdentifier];NSLog(@"Previously purchased: %@", productIdentifier);}NSLog(@"Not purchased: %@", productIdentifier);}self

这篇关于iOS内购IAP(In App Purchases)入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1017520

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

【iOS】MVC模式

MVC模式 MVC模式MVC模式demo MVC模式 MVC模式全称为model(模型)view(视图)controller(控制器),他分为三个不同的层分别负责不同的职责。 View:该层用于存放视图,该层中我们可以对页面及控件进行布局。Model:模型一般都拥有很好的可复用性,在该层中,我们可以统一管理一些数据。Controlller:该层充当一个CPU的功能,即该应用程序

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C语言指针入门 《C语言非常道》

C语言指针入门 《C语言非常道》 作为一个程序员,我接触 C 语言有十年了。有的朋友让我推荐 C 语言的参考书,我不敢乱推荐,尤其是国内作者写的书,往往七拼八凑,漏洞百出。 但是,李忠老师的《C语言非常道》值得一读。对了,李老师有个官网,网址是: 李忠老师官网 最棒的是,有配套的教学视频,可以试看。 试看点这里 接下来言归正传,讲解指针。以下内容很多都参考了李忠老师的《C语言非