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

iOS 应用内购买 IAP_第1张图片
登录iTunes账号

2. 填写信息,新建App

iOS 应用内购买 IAP_第2张图片
选择我的App

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

iOS 应用内购买 IAP_第3张图片
iOS 应用内购买 IAP_第4张图片

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

​三、创建购买项目

iOS 应用内购买 IAP_第5张图片
iOS 应用内购买 IAP_第6张图片

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

iOS 应用内购买 IAP_第7张图片

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

iOS 应用内购买 IAP_第8张图片

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

四、创建测试账号​

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

iOS 应用内购买 IAP_第9张图片
iOS 应用内购买 IAP_第10张图片

添加这个账号还不能是之前已经创建过的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,输入测试账号即可进行购买。​

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

你可能感兴趣的:(iOS 应用内购买 IAP)