美文网首页
iOS内购-iap-In-App Purchases-开发及注意

iOS内购-iap-In-App Purchases-开发及注意

作者: Jason_hzb | 来源:发表于2019-05-19 22:26 被阅读0次

    *深坑记录,以后发现一些不常见的坑可能会更新

    1.一般发生于首次提交app或添加新商品,当你的app通过审核以后,你发现在生产环境下获取不到商品,这是因为app虽然过审核了,但是内购商品还没有正式添加到苹果的服务器里,耐心等待一段时间就可以啦~

    2.我创建的IAP商品,当我不用,想删除时,发现无法删除,我点击删除按钮以后,页面就自动刷新,刷新回来,那条商品依然存在,我换了N多浏览器,连手机浏览器都试了,就是不行,没办法只能提交审核,然后苹果给我反馈说他们找不到我这个商品在哪......

    • 解决办法:审核时在附加里向苹果说明情况,最好录个视频上传到网站上(优酷就可以),把视频地址给苹果
    • 后续:当时有过申诉,但是因为苹果只会给注册开发者账号的邮件发信息,而老大每天都不在公司,所以与苹果的沟通终中断了。我在将App转移账号以后,这个Bug消失了,不知道是转移账号解决的还是苹果修复了。

    一:iap开发

    具体的开发过程不太想写了,网上太多了,随随便便百度一下就有好几页,这里只给大家推荐一个库,使用起来很方便
    下载地址: IAPHelper

    NSSet* dataSet = [[NSSet alloc] initWithObjects:@"这里是iap商品id", nil];
      [IAPShare sharedHelper].iap = [[IAPHelper alloc] initWithProductIdentifiers:dataSet];
    
    // 请求商品信息
    [[IAPShare sharedHelper].iap requestProductsWithCompletion:^(SKProductsRequest* request,SKProductsResponse* response)
       {
        if(response.products.count > 0 ) {
         SKProduct *product = response.products[0];
    
         [[IAPShare sharedHelper].iap buyProduct:product
               onCompletion:^(SKPaymentTransaction* trans){
             if(trans.error)
             {
             }
             else if(trans.transactionState == SKPaymentTransactionStatePurchased) {
              // 到这里购买就成功了,但是因为存在越狱手机下载某些破解内购软件的情况,需要跟苹果服务器的确认是否购买成功
              // IAPHelper提供了这个方法,验证这步可以写在前端,也可以写在服务器端,这个自己看情况决定吧...
    
            ### //   !! 这里有一种情况需要注意。程序走到这里的时候,已经是支付成功的状态。
            ### // 此时用户的钱已经被苹果扣掉了,接下来需要做的是验证购买信息。
            ### // 但是如果在 '购买成功'——'验证订单' 中间出现问题,断网、App崩溃等问题的话,会出现扣了钱但是充值失败的情况
            ### // 所以在这里可以将下文中的验证信息存在本地,验证成功再后删除。验证失败的话,可以在每次App启动时将信息取出来重新验证
    
              // 购买验证
              NSData *receipt = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] appStoreReceiptURL]];
              //网上的攻略有的比较老,在验证时使用的是trans.transactionReceipt,需要注意trans.transactionReceipt在ios9以后被弃用
              [[IAPShare sharedHelper].iap checkReceipt:receipt onCompletion:^(NSString *response, NSError *error) {}];
    
        }
        else if(trans.transactionState == SKPaymentTransactionStateFailed) {
              if (trans.error.code == SKErrorPaymentCancelled) {
              }else if (trans.error.code == SKErrorClientInvalid) {
              }else if (trans.error.code == SKErrorPaymentInvalid) {
              }else if (trans.error.code == SKErrorPaymentNotAllowed) {
              }else if (trans.error.code == SKErrorStoreProductNotAvailable) {
              }else{
              }
           }
        }];
        }else{
              //  ..未获取到商品
        }
       }];
    
    

    关于内购的开发大概就这些,网上攻略贼多,大概搜索一下就能写的出来,iap开发起来虽然不难,但是玛德法克这里面坑实在太多...

    二:iap开发时的注意事项

    1.什么情况需要使用iap,什么情况使用三方支付

    这里我的理解是:

    购买的东西是实物,不存在于APP中,用三方支付,比如淘宝等一堆电商,他们的商品都是不存在于App中的。
    如果你的支付和购买是为了解锁App的功能,就一定要用iap,即内购

    举个栗子:现在有很多在线教育App,比如网易云课堂,腾讯课堂,可以在App中购买视频并在APP中观看,也就是说 '观看视频' 这个功能是本身就存在于APP中的,只是需要你先购买视频,才能使用'观看视频'这个功能,这个时候,这种解锁APP已有功能的操作,就必须要使用iap

    2.关于商品类型:iap创建商品时选择的商品类型大概分三类

    image
    1.消耗型商品:

    类似游戏中的钻石,还有现在某些APP中的货币,比如斗鱼里的鱼丸、映客里的映票。会被消耗的,要选择消耗型商品

    2.非消耗型商品:

    无法被消耗的商品,比如上文提到的视频课程,一次购买,就应该永久可以观看

    3.订阅类型商品:

    多用于会员,会员也可以做成用 消耗型商品获取的货币来购买

    现在不行了,之前提交过很多都没事,也许以前会员功能存在感太低审核团队没发现?又或是最近的新规,新提交的版本因为这个原因被拒了,错误描述:
    Business - 3.1.1 We noticed that your app is using Consumable In-App Purchase products as intermediary currency for the exchange of items that function as Non-Renewing Subscriptions.

    这里要提一点:如果你的公司是外包公司,有订阅类型商品的APP一定要用客户的账号提交审核,因为当APP中有过订阅类型商品,注意是有过,创建过再删除也算,这个APP无法被转移账号

    3.注意事项

    1.当你使用消耗型商品

    大多数的消耗型商品都是需要登录的,因为需要在数据库存余额嘛。
    需要注意的是:在登录之前,你最好不要让用户看到商品,有可能会因为这个原因被拒(看运气),栗子:

    image

    如上图。这是充值页面,即商品页面。
    你有两个选择:

    1.增加游客购买,即用户到达充值页面,点击充值时,即使用户未登陆,也能充值

     # 2.让未登录用户无法到达充值页面。且必须要由用户来选择
    
       栗子:有个按钮,点击跳转此充值页面,当未登录用户点击按钮时,
       你必须要弹出选择框,由用户来选择是登录/注册或者取消,并说明情况 
       如下:
    
    
    image
    2.当你使用非消耗型商品

    当你使用非消耗型商品时,你需要添加一个恢复购买的按钮
    这个常见于各种游戏中,其实知道这个规定以后还是挺好理解的,非消耗型商品是不可被消耗的,一次购买终身使用的,非消耗型的商品是跟appleId绑定的,就是你平时下载APP让你输入账号密码的内个。
    你需要一个恢复购买的按钮,来让用户恢复他购买的内容,上面内个IAPHelper也有这个方法,自己看一下

    3.订阅型商品

    使用或曾经使用过订阅型商品的APP无法转移

    在苹果帮助里,有个分类是:什么样的APP可以被转让
    我一看,完全符合啊,然后就是开发、提交审核、通过,但是当我转让时却TM提示我无法转让,当我再次回去查看帮助,向下拉网页拉倒底部时
    发现有另一个分类:为什么我的APP无法转让。。。。。。

    image

    以上

    作者:狗带儿
    链接:https://www.jianshu.com/p/8d33953a3e3f
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    相关文章

      网友评论

          本文标题:iOS内购-iap-In-App Purchases-开发及注意

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