iOS开发内购详细版本说明

作者: 优雅地小男子 | 来源:发表于2017-02-23 11:08 被阅读17651次

一、最近公司很多的项目用到了内购,抽空整理下内购的详细内容吧。

1、先从内购的iTunesConnect里配置说起吧,我们先进入苹果的iTunesConnect链接https://itunesconnect.apple.com,然后进入入下界面。

银行信息填写

填写好银行卡信息和公司地址等信息以后,第一步算完成了。

2、进入iTunesConnect选择我的APP模块,创建新的APP,绑定好你在苹果开发者中心创建的apple IDS还有bundle id,那么就创建成功了一个新的APP应用。如下图:

创建APP

3、进入新创建的APP应用,点击如图所示功能按钮:

我的APP“功能”

4、进入功能以后我们就可以创建我们想要的内购产品的ID了,一般都会存在如下几个选择项:

选择类型

5、我们公司的项目由于都是直播类型的课程购买,所以用的是消耗型的项目,选择好然后就进入创建界面里去创建产品了。

需要填写的几项

6、填写好这几项,一个新的内购产品就创建成功了,我们需要记录下每个产品的内购ID,也就是唯一ID,为以后购买产品做准备。

7、我们需要在工程里配置好证书,测试证书是必须的因为我们内购需要连接到苹果的App Store的,需要正式的测试证书才能测试,同时把下图工程中的这一配置打开:

这是很重要的一步

二、讲完上面基本的配置以后,我们进入我们最重要的部分,那就是我们的代码部分。

1、要使用苹果的内购功能,我们需要引入苹果的头件“#import<StoreKit/StoreKit.h>”,引入进来以后,我们就需要引入"SKProductsRequestDelegate,SKPaymentTransactionObserver"这两个代理,我们需要在内购的那个页面viewDidLoad方法里直接调用方法,如下图:

开启内购检测

然后接下来就是几个最重要的代理方法了,如果正常的内购能够走通,那么这几个代理方法就会很流畅的运行过去,并且返回你所购买的商品的信息。让我们一步步来分析:

内购购买(1) 内购购买(2) 内购购买(3) 内购购买(4) 内购购买(5) 内购购买(6) 内购完成

2、进过我这一堆的代码组合,是否已经明白了内购的方式了呢,只要把我列举的这几个方法,统统的导入进你的工程,那么就基本上可以了。

三、常见内购错误,自己做内购总结的几个常见错误。

1、请求不到内购的产品信息。

解决办法:(1)、先看看bundle id,和测试证书之类的东西配置的都对不对,然后看看产品的唯一ID和iTunesConnect里的能不能对应上。如果都没有问题,那么看下面的。

                  (2)、去看看iTunesConnect里的协议里面的公司的地址信息和银行卡信息是否填写正确,只要没有报错,报红就可以。基本上上面这几点弄好了也就能请求到商品了。

2、手机提示无法连接到itunesStore

解决办法:把手机的Apple ID先注销掉,然后购买的时候重新填写Apple ID。

相关文章

  • iOS开发内购详细版本说明

    我在点击购买的时候突然断网了,这个时候并没有返回成功,但是我在连上网络后,并不会在走代理方法,只有当进程杀死后,然...

  • iOS开发内购详细版本说明

    2018-02-02 我在点击购买的时候突然断网了,这个时候并没有返回成功,但是我在连上网络后,并不会在走代理方法...

  • iOS开发内购详细版本说明

    一、最近公司很多的项目用到了内购,抽空整理下内购的详细内容吧。 1、先从内购的iTunesConnect里配置说起...

  • cocopods 的使用

    iOS开发~CocoaPods使用详细说明 选择版本### pod 'AFNetworking', '~> 1.0...

  • iOS 苹果内购流程

    本文参考: iOS开发之内购完全笔记 iOS开发内购全套图文教程 iOS应用程序内购/内付费(一) 代码...

  • ios内购IAP相关内容

    ios内购IAP相关内容 iOS IAP应用内购详细步骤和问题总结指南 - 简书https://www.jians...

  • iOS开发 内购流程 详细介绍

    做了很多电商的项目了,都在用各大第三方支付,作为一名iOS开发,苹果已经在强制推行内购了,所以,你不得不了解一下啦...

  • iOS 内购如何验证订单,iOS7.0以后transaction

    iOS 内购详细步骤 参考:iOS 内购验证订单方法 无法判断是沙盒环境还是正式环境,思路:先验证正式环境,再验证...

  • iOS应用程序内购(IAP)

    参考:iOS开发内购全套图文教程

  • applePay

    # iOS应用内支付(内购)的个人开发过程及坑!

网友评论

  • d8394514a286:大佬,请教个问题,你的项目里面是直播类型的课程的购买,如果课程很多,那不是添加起来很麻烦吗?我的项目里面也是类似的直播课程,不知道选哪种类型好
  • BohrIsLay:vip按月收费,和按年收费,如果用户已订阅按月收费,删除app后,再次进入,此时还是可以进入vip购买页面,这个时候用户再选择按年收费购买,岂不是又另外收取年费,这个如何控制?
    优雅地小男子:@BohrIsLay 这个需要你们自己做一个权限管理的,跟购买没关系吧
  • 欺魄小妖:[[SKPaymentQueue defaultQueue] addPayment:payMent];到这句代码崩溃了怎么回事?
    iOS开发周立贺:需要在控制器销毁的时候[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
    优雅地小男子:@欺魄小妖 打断点调试下吧,看看payment有值吗
  • Monster_Lai:我做的也是视频课程这块收费,请问下包年包月这种服务用什么类型的呢?非续订订阅?
    优雅地小男子:@Monster_Lai 包年只是一个购买后的结果,跟用什么方式没关系,消耗性的理论上没问题
    Monster_Lai:@优雅地小男子 可以使用消耗型商品兑换代购币,在APP内部用代购币购买包年服务。这样会被拒吗?
    优雅地小男子:@Monster_Lai 续订类型,都可以的
  • 90后的晨仔:你好我想在弹出添加到商品列表之后,弹出带有购买按钮的界面,点击了购买之后,在苹果处理的时候添加一个等待提示框应该加在什么位置?为什么点击了购买之后他就不走回调了,而是在交易结束的时候再走的回调。
  • 90后的晨仔:SKPayment *payment = [SKPayment paymentWithProduct:product];
    [[SKPaymentQueue defaultQueue] addPayment:payment];
    你好,请问SKPayment可以传多个商品对象吗?
  • 4e237bf77f64:请问你们退款是怎么处理的
  • 4e237bf77f64:您好,你们内购退款是怎么处理的啊
    优雅地小男子:@Someonelik_8d8c 找苹果
  • hhgvg:服务器要配置吗
    优雅地小男子:@hhgvg 不用的
  • 06219f628e93:可以加下好友吗,有关于内购的问题问下,很急, QQ号:1047205486
  • 剪刀_石头_布:我想问一下。内购的钱什么时候公司才能收到。是有时间限制还是得有最低数额限制。这个限制是多少呢
    优雅地小男子:@剪刀_石头_布 一般一个月会有账单信息,必须满一万才能转过去你公司账户
  • 一个会甩锅的程序仔:身为键盘侠的我,特意登录喷一波。就不能贴代码吗?放图片是啥意思
    优雅地小男子:@一个会甩锅的程序仔 照着撸啊:cry::cry:
  • b13d64bd73ce:用这个代码调用内购的话速度好慢,内购弹窗好慢才出来,有没有解决方法
    优雅地小男子:@喜之郎不卖果冻 你想多快
  • 47f0c3faeedf:你好,我想问下,在这边都准备好后,内购项目如何审核通过?审核步骤是怎样的?
    优雅地小男子:@无聊蚊子 审核会跟着项目上线一起走的
  • e8f474300b5d:您好,我按照你写的这里崩溃了, [[SKPaymentQueue defaultQueue] addPayment:payment];
    错误:invalid mode 'kCFRunLoopCommonModes' provided to CFRunLoopRunSpecific - break on _CFRunLoopError_RunCalledWithInvalidMode to debug. This message will only appear once per execution.
    libc++abi.dylib: terminate_handler unexpectedly threw an exception,请问这个怎么解决啊?谢谢
    iOS开发周立贺:需要在控制器销毁的时候[[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
    e8f474300b5d:您好 ,我的内购 NSLog(@"productID:%@", response.invalidProductIdentifiers);一直报 exception Invalid product identifier: (null) 我按照你写的这里崩溃了 [[SKPaymentQueue defaultQueue] addPayment:payment]; ,怎么才能看出来银行卡是否审核通过,apple审核通过是不是会给我们发邮件?谢谢
    优雅地小男子:@wangliangyuan 应该是丢单或者没有订单,你打断点走一下看看
  • 输入个昵称太难了:你好,我想问一下你这个存在丢单的情况吗??
    优雅地小男子:@输入个昵称太难了 你可以把订单先保存到本地,然后没次请求的时候先去走本地的订单如果有直接去请求没有的话走新下订单,明白吗
    输入个昵称太难了:@优雅地小男子 我是根据你的写的,但是有一个问题,我在点击购买的时候突然断网了,这个时候并没有返回成功,但是我在连上网络后,并不会在走代理方法,只有当进程杀死后,然后在进入到这个页面,那个成功的代理方法才会走.这个问题如何解决呢??
    优雅地小男子:@输入个昵称太难了 不存在
  • 75281188d37c:大大,Guideline 1.1.6 - Safety - Objectionable Content

    We noticed that your app’s in-app purchase products are labeled as 元, which could confuse and mislead users into believing they are purchasing a real currency.

    Please see attached screenshots for details.
    这个问题该怎么弄呀
    优雅地小男子:不要带元,订单信息里面,用金币或者什么来代替
  • 334130c47f33:求救🆘兄弟
  • 阿拉斯加的狗: //从沙盒中获取交易凭证并且拼接成请求体数据
    NSURL *receiptUrl=[[NSBundle mainBundle] appStoreReceiptURL];
    NSData *receiptData=[NSData dataWithContentsOfURL:receiptUrl];

    NSString *receiptString=[receiptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];//转化为base64字符串

    NSString *bodyString = [NSString stringWithFormat:@"{\"receipt-data\" : \"%@\"}", receiptString];//拼接请求数据
    NSData *bodyData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];


    //创建请求到苹果官方进行购买验证
    NSURL *url=[NSURL URLWithString:SANDBOX];
    NSMutableURLRequest *requestM=[NSMutableURLRequest requestWithURL:url];
    requestM.HTTPBody=bodyData;
    requestM.HTTPMethod=@"POST";
    //创建连接并发送同步请求
    NSError *error=nil;
    NSData *responseData=[NSURLConnection sendSynchronousRequest:requestM returningResponse:nil error:&error];
    if (error) {
    NSLog(@"验证购买过程中发生错误,错误信息:%@",error.localizedDescription);
    return;
    }
    NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:nil];
    NSLog(@"%@",dic);
    if([dic[@"status"] intValue]==0){
    NSLog(@"购买成功!");
    NSDictionary *dicReceipt= dic[@"receipt"];
    NSDictionary *dicInApp=[dicReceipt[@"in_app"] firstObject];
    NSString *productIdentifier= dicInApp[@"product_id"];//读取产品标识
    //如果是消耗品则记录购买数量,非消耗品则记录是否购买过
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    if ([productIdentifier isEqualToString:@"123"]) {
    int purchasedCount=[defaults integerForKey:productIdentifier];//已购买数量
    [[NSUserDefaults standardUserDefaults] setInteger:(purchasedCount+1) forKey:productIdentifier];
    }else{
    [defaults setBool:YES forKey:productIdentifier];
    }
    //在此处对购买记录进行存储,可以存储到开发商的服务器端
    }else{
    NSLog(@"购买失败,未通过验证!");
    }
    阿拉斯加的狗:@优雅地小男子 有没有demo或者代码 可以看看你是怎么写的吗 兄弟
    优雅地小男子:@阿拉斯加的狗 有的。我现在也是改成这种了,这种是为了避免后台接受苹果返回的验证有一些特殊符号会被后台自动过滤,所以做的转换,后台再去转换回来,这样验证串就不会缺少东西了。
    阿拉斯加的狗:这个跟 楼主你的购买完成的方法不一样 这个有啥区别么
  • 阿拉斯加的狗:请问 有的人在购买完成是这样的想法是什么意思呢?
  • _後知後覺_:你好问一下,话费流量充值也要走内购吗,内购的范畴是怎么定义的啊?
    优雅地小男子:@_後知後覺_ 这个不是虚拟物品自我感觉,应该不用内购吧
  • HanZhiZzzzz:请问一下10点几的版本怎么不能直接调用指纹支付?我有一个9点几的版本打开了指纹支付的话,就可直接调用指纹支付。
    过眼云烟1102:那个审核备注 怎么填
    HanZhiZzzzz:@优雅地小男子 嗯嗯 谢谢哈
    优雅地小男子:@HanZhiZzzzz 看一下十点几的版本指纹支付方法有没改变 比9点几的
  • 3f3db82e1f65:屏幕快照必须是在app里面的截图吗
  • lc_cat:价格怎么定义成自己服务器的价格啊
    优雅地小男子:不能自己定义价格
  • 49c9990ff26c:那个屏幕快照我上哪给他找去?
    优雅地小男子:@_mry截屏
    lc_cat:@_mry 什么意思 ui 做一张吗
    49c9990ff26c:审核信息那一栏
  • LD_左岸:您的第一张图--->银行信息填写的那张图--->我点了Request之后 弹窗提示我:Add New Legal Entity
    Address line 1 cannot be more than 40 characters


    这个是什么意思
    Address Line 1 这一行 这不报超过40个字符了 而且这一行里填写的地址 也是自动生成的 应该和我那个申请证书地址一样 我现在把这一行的东西 分成两部分 在Address Line 1这一行里填 城市名 在Address Line 2这一行里填具体的街道 是否可行
    优雅地小男子:@左岸__ 就是别太长,英文的就行
  • 1274e29beb9c:请教一下,我的 didReceiveResponse没有收到回调。这属于什么情况?我是app首次申请商品,是否需要提交ipa包才能调试app内购买商品?
    1274e29beb9c:@优雅地小男子 谢谢您的答复。好几天没上线了。在您文章的帮助下,我顺利完成了苹果内购。再次说声谢谢。
    优雅地小男子:@leckel 不需要提交包,只要开发者账号配置好就行了
    优雅地小男子:@leckel 不需要提交IPA包只要测试证书开发者账号配置好了就行
  • 58bc6c29de0a:讲的很详细。正好我们公司开始做内购。谢谢大神的经验:smile:
  • FR_Zhang:发现一件事情,就是在xcode的 capabilities in-app purchaes 没打开,依然可以内购,所以说 这个开关到底要不要打开
    优雅地小男子:@FR_Zhang 打开
    优雅地小男子:@FR_Zhang 要。打开就是了,苹果官方写的没错的
  • King_Liu:你好我想问一下,怎样修改内购商品的币种?我的项目中在价格那一栏选项中是USD,不知如何改成人民币。
    King_Liu:@优雅地小男子 有中国的
    优雅地小男子:@非著名程序Y 销售区域有中国吧
  • survivorsfyh:您好,我想请问您一下,我支付的 code 流程跟您介绍的顺序方法是一致的,但是我支付收到的回调结果却是SKErrorUnknown(未知的错误,您可能正在使用越狱手机),请问您下这是为什么 ... 很费解
    survivorsfyh:@优雅地小男子 您好,需要后台做些什么操作么,我现在itunes connect 和项目需要配置的都配了,但是收到支付的回调却一直是 SKErrorUnknown ... 这个会跟后台有关系么
    春鹏:你好,请教一下,内购的话,需要后台集成什么吗?
    优雅地小男子:@survivorsf 看一下你配置的哪里有问题,检查下itunes connect 里面配置有没有问题,再就是bundle id 和证书什么的
  • f35dfaafcc20:请问下载填写资料的时候遇到这个怎么处理
    An account corresponding to your name/address and/or Taxpayer Identification Number has already been created. If you believe you are reaching this message in error, you may Contact Us.
    优雅地小男子:@随风飘一飘 应该是你填写的有问题,你翻译下内容就知道,说你填写的名字或者地址已经创建了
  • boshi233:你好问一下,这个银行卡信息可以填其他公司的吗?
    lc_cat:银行卡 账户持有人 怎么写啊 写成公司的名字 并且 是英文的吗
    boshi233:@优雅地小男子 好的,谢谢
    优雅地小男子:@boshi266 银行卡随便填,只要能收到钱就行,公司名称别乱写
  • 爱iOS的延哥:显示名称 这一项怎么填写?
  • Monkey_Hou:再加上沙箱测试的讲解就完整了~
  • 大牛大神:老哥有没有代码可以我copy一下啊
    优雅地小男子:@大牛大神 你直接照着上面写就行啊

本文标题:iOS开发内购详细版本说明

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