美文网首页
iOS 应用内购买 IAP

iOS 应用内购买 IAP

作者: Sunnyxi | 来源:发表于2016-09-07 14:00 被阅读500次

    写在前面

    做完应用内购买(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,输入测试账号即可进行购买。​

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

    相关文章

      网友评论

          本文标题:iOS 应用内购买 IAP

          本文链接:https://www.haomeiwen.com/subject/vbujettx.html