iOS 应用内购买 IAP

写在前面

做完应用内购买(In-App Purchase)有一段时间了。想想还是需要记录下来,虽然网上的资料也很多。记得当时自己在做的时候也搜集了不少资料,但是也走了不少弯路,因为每个人写的着重点都不一样。很多时候只有自己去做了那件事情,才能体会到即使是再多的资料也会避免不了弯路,每个人做的过程都不一样,收获或多或少也是不一样的。所以我也写出来供大家参考参考,希望对做这个的你有帮助。

什么时候用IAP?

开始我都不知道有个东西叫应用内购买。当时的需求是在应用内充值虚拟货币, 客户当初提说要用苹果支付,当初想当然的就以为是Apple pay,然后在纳闷Apple pay 都还没在中国发布,怎么来用这个支付?然后搜集Apple pay 的资料,在收集的过程中发现了应用内购买这个名词。其实对于应用内购买虚拟货币,使用支付宝、微信等之类的三方支付,在App审核的时候是不能通过的,除非灰度上线,但是Apple允许购买实物商品使用这些三方的支付平台,因此对于虚拟货币的话就只能使用Apple的支付,对于这个最方便的还是IAP,像游戏的充值虚拟货币、微信购买表情包都是使用这种方式。想想当时真的好惭愧呀,居然不知道这个,真是后知后觉。

IAP是怎么一回事?

我是一个俗人,专业性的东西,还是喜欢以一个常人的角度来说。​

​比如我在微信上购买表情包、或者购买游戏虚拟货币,因为在我手机里面已经绑定了Apple ID,购买的时候Apple是根据这个Apple ID来进行购买的。

用户充值的钱哪里去了?​在开发者账号里面。但是用户充值的钱,你是不能全部得到的,Apple会从中收取一定比例的钱,俗称中介费。以前是30%,现在调低了。

之前我是一个不太善于写的人,最近发现把自己积累的写下来是多么的重要,不管好与坏,那都是一份成长的记录。

下面就说说怎么做IAP:

一、创建应用

1. 一个开发者账号,登录 iTunes

登录iTunes账号

2. 填写信息,新建App

选择我的App

二、签订协议、税务和银行业务

​这三个都要填写,不然后面就用不了。

​三、创建购买项目

​根据自己需要的类型选择创建,虚拟货币充值选择的是第一个消费型项目。

对于产品ID,由自己创建,是唯一的,类似于我们创建的bundle ID,一般上线产品都是动态获取,就由后台服务器接口提供,接口请求到产品ID,再去Apple服务器请求获取商品信息。而且,在调试的时候务必使用对应的bundle ID,否则请求不到你创建的项目信息。

​需要多少个项目一一添加就可以了。

四、创建测试账号​

在调试阶段,App没有上线通过审核之前是不能用自己的Apple ID进行测试使用的。必须使用测试账号才行。因此需要创建测试账号,其实这应该在第三步创建项目之前,在审核备注那里就可以填写测试账号用户名和密码了。

添加这个账号还不能是之前已经创建过的Apple ID账号,必须是一个全新的,没有注册过的账号。

五、与代码对接

原本是自己写的,后面在GitHub上发现个不错的​demo,用起来非常简单。点击链接

1.定义一个全局变量:

@property(strong, nonatomic)ASBanker *banker;

2. 从Apple服务器请求商品信息

[self.banker   fetchProducts:_productIDArr];​

这里的​_productIDArr是上面填写的产品ID的数组。

2. 支付以及支付之后

#pragma mark - ASBankerDelegate

// Required

- (void)bankerFailedToConnect{

NSLog(@"从APPStore请求充值数据失败");

}

- (void)bankerNoProductsFound{

NSLog(@"暂无可充值的选项");

}

//TODO:从苹果请求到数据

- (void)bankerFoundProducts:(NSArray*)products {

//在此方法刷新UI

}

- (void)bankerFoundInvalidProducts:(NSArray*)products {

NSLog(@"无效的商品");

}

//完成购买

- (void)bankerProvideContent:(SKPaymentTransaction*)paymentTransaction {

      // Unlock feature or content here for the user.

      for(SKProduct*productinself.data) {

               if([product.productIdentifierisEqualToString:paymentTransaction.payment.productIdentifier]) {

                 //存入本地购买

               NSUserDefaults*defaults = [NSUserDefaultsstandardUserDefaults];

                [defaultssetBool:YESforKey:product.productIdentifier];

                 [defaultssynchronize]; 

             }

      }

}

//TODO:购买成功

- (void)bankerPurchaseComplete:(SKPaymentTransaction*)paymentTransaction {

//此处务必记得恢复购买,否则第二次购买的时候,是购买失败的

[self.bankerrestorePurchases];//恢复购买

[selfSaveRecharge:paymentTransaction];

}

- (void)bankerPurchaseFailed:(NSString*)productIdentifier withError:(NSString*)errorDescription {

SHOWFailSVProgress(@"支付失败");

}

- (void)bankerPurchaseCancelledByUser:(NSString*)productIdentifier {

NSLog(@"用户取消支付");

}

- (void)bankerFailedRestorePurchases{

NSLog(@"恢复购买失败");

}

// Optional

- (void)bankerDidRestorePurchases{

NSLog(@"已经恢复购买");

}

- (void)bankerCanNotMakePurchases{

// In-App Purchase are probally disabled in the Settings

// Tell the user

UIAlertView*av = [[UIAlertViewalloc]initWithTitle:@"您的设备不支持支付"message:nildelegate:nilcancelButtonTitle:@"确定"

otherButtonTitles:nil];

[avshow];

}

- (void)bankerContentDownloadComplete:(SKDownload*)download {

// Download is complete. Content file URL is at

// path referenced by download.contentURL. Move

// it somewhere safe, unpack it and give the user

// access to it

// The hosted content package is downloaded in the form of a Zip file.

}

- (void)bankerContentDownloading:(SKDownload*)download {

NSLog(@"Download progress = %f", download.progress);

NSLog(@"Download time = %f", download.timeRemaining);

}

五、调试

1.调试的时候需要用真机调试

2.也许你的真机原本就已经登录过了Apple ID,但请在支付的时候,可能默认的就是登录过的Apple ID,所以在支付的时候注意下用申请的测试Apple ID,不要用其他的Apple ID,否则是支付不了的。

PS:在测试充值之前,可以到手机设置—> iTunes Store与App Store —> AppleID注销之前登录的AppID,然后在购买的时候会弹出登录界面,选择现有AppID,输入测试账号即可进行购买。​

其实做过了一遍后,会发现其实很简单,没有想的那么复杂~​

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • iOS应用内付费(IAP)开发步骤 1.苹果iTunes Connect内购产品信息录入。 1)创建app内购买项...
    MillerWang阅读 10,934评论 0 7
  • 在我们应用开发中我们经常在自己的项目中使用到支付,下面我们来谈谈iOS这块的支付;iOS支付主要分为两类,第三方支...
    Hither阅读 8,254评论 9 42
  • 转载:http://www.woshipm.com/pd/484085.html 应用内支付指使用手机操作系统自带...
    刀刀的巴扎嘿阅读 1,030评论 0 2
  • iOS支付 iOS支付分为两类,第三方支付和应用内支付(内购)。 第三方支付包括:支付宝支付、微信支付、银联支付、...
    请输入账号名阅读 6,173评论 3 22
  • 是哪一种约让你久等 是哪一条路让你远行 是哪一个故事让你放下 生命,您好。 你总止于一种常态,久等,远行,放下……
    深深是蓝阅读 133评论 1 7