美文网首页iOS收藏iOSiOS技术分享
iOS开发 内购流程 手把手教你还不学?

iOS开发 内购流程 手把手教你还不学?

作者: 睡不着的叶 | 来源:发表于2016-06-13 17:18 被阅读32983次

做了很多电商的项目了,都在用各大第三方支付,作为一名iOS开发,苹果已经在强制推行内购了,所以,你不得不了解一下啦。可能还有些人不知道哪种情况下一定要用到内购,简单说明一下,如果你购买的商品,是在本app中使用和消耗的,就一定要用内购,否则会被拒绝上线,例如:游戏币,在线书籍,app中使用的道具等。如果购买的就是普通的商品,例如淘宝买东西等,就不需要用内购,想怎么玩都自己说了算。比较坑的一点就是,内购的话,还要和苹果3/7分成呢,感觉好黑啊,有木有。。。废话不多说,就让我把愤怒化为下面的文字吧💢

一.向appStore提交资料

第一步 第二步 第三步
操作完第三步然后记得保存 第四步 第五步

先点击Contact Info 的Set Up

第六步 第七步

都填写完记得保存,然后回到上一个页面

第八步 第九步 第十步 第十一步 第十二步
进行十二步的时候可能有些银行通过苹果这个方法查不到,就需要借助百度了,一定要准确查询,否则会有问题。我这里推荐一个地址
https://e.czbank.com/CORPORBANK/query_unionBank_index.jsp 第十三步
这一步需要注意的是,货币类型可能有歧义,看你是想收美元还是人民币了,都说美元合适。不过,我做的时候为了避免事情,还是选择了CNY,支持国产。还有一点,银行账号如果是对公的账号,需要填写公司的英文名称,如果没有的话,上拼音!然后点击保存银行信息就算ok了,然后退回到最开始的页面 第十四步 第十五步 第十六步 第十七步 第十八步 第十九步

这里要注意的是,虽然这个页面看起来要填写的信息很多,其实很多都没有什么卵用,都是对于美国那边什么法律需要配合的那些,一般咱们都不用,只需要把该勾选的地方勾选,然后提交就好了。

第二十步 第二十一步 第二十二步

二.创建内购项目

第一步 第二步

根据自己app的需要选择类型,写的很详细,就不多说了

第三步 第四步 第五步 第六步

三、添加项目内购测试帐号

第一步 第二步

四、废话不多说,上代码

第一步导入StoreKit.framework库
然后先看.h文件

#import <StoreKit/StoreKit.h>
enum{IAP0p20=20,
IAP1p100,
IAP4p600,
IAP9p1000,
IAP24p6000,}
buyCoinsTag;

//代理@interface RechargeVC : UIViewController <SKPaymentTransactionObserver,SKProductsRequestDelegate >
{
int buyType;
}

- (void) requestProUpgradeProductData;

-(void)RequestProductData;

-(void)buy:(int)type;

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions;

-(void) PurchasedTransaction: (SKPaymentTransaction *)transaction;

- (void) completeTransaction: (SKPaymentTransaction *)transaction;

- (void) failedTransaction: (SKPaymentTransaction *)transaction;

-(void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentTransaction *)transaction;

-(void) paymentQueue:(SKPaymentQueue *) paymentQueue restoreCompletedTransactionsFailedWithError:(NSError *)error;

- (void) restoreTransaction: (SKPaymentTransaction *)transaction;-(void)provideContent:(NSString *)product;

-(void)recordTransaction:(NSString *)product;

@end

然后看.m文件

#import "RechargeVC.h"

//在内购项目中创的商品单号
#define ProductID_IAP0p20 @"Nada.JPYF01"//20
#define ProductID_IAP1p100 @"Nada.JPYF02" //100
#define ProductID_IAP4p600 @"Nada.JPYF03" //600
#define ProductID_IAP9p1000 @"Nada.JPYF04" //1000
#define ProductID_IAP24p6000 @"Nada.JPYF05" //6000

@interface RechargeVC ()

@end

@implementation RechargeVC

- (void)viewDidLoad { 

 [super viewDidLoad];
 [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
 [self buy:IAP0p20];

}

-(void)buy:(int)type{ 
  buyType = type; 
  if ([SKPaymentQueue canMakePayments]) {
   [self RequestProductData]; NSLog(@"允许程序内付费购买");
  }else{ 
  NSLog(@"不允许程序内付费购买"); 
  UIAlertView *alerView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"您的手机没有打开程序内付费购买" 
delegate:nil cancelButtonTitle:NSLocalizedString(@"关闭",nil) otherButtonTitles:nil];
   [alerView show]; }
}

-(void)RequestProductData{

 NSLog(@"---------请求对应的产品信息------------"); 
NSArray *product = nil; 
switch (buyType) 
{
   case IAP0p20: product=[[NSArray alloc] initWithObjects:ProductID_IAP0p20,nil];
   break;

   case IAP1p100: product=[[NSArray alloc] initWithObjects:ProductID_IAP1p100,nil];
   break; 

  case IAP4p600: product=[[NSArray alloc] initWithObjects:ProductID_IAP4p600,nil];
   break;

   case IAP9p1000: product=[[NSArray alloc] initWithObjects:ProductID_IAP9p1000,nil]; 
  break;

   case IAP24p6000: product=[[NSArray alloc] initWithObjects:ProductID_IAP24p6000,nil]; 
  break;

 default:
 break;
} 

NSSet *nsset = [NSSet setWithArray:product];
 SKProductsRequest *request=[[SKProductsRequest alloc] initWithProductIdentifiers: nsset];
 request.delegate=self; 

[request start];}

//<SKProductsRequestDelegate> 请求协议//收到的产品信息
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{

  NSLog(@"-----------收到产品反馈信息--------------"); 
  NSArray *myProduct = response.products;
  NSLog(@"产品Product ID:%@",response.invalidProductIdentifiers);  
  NSLog(@"产品付费数量: %d", (int)[myProduct count]); 

  // populate UI 
  for(SKProduct *product in myProduct){
  NSLog(@"product info"); 
  NSLog(@"SKProduct 描述信息%@", [product description]); 
  NSLog(@"产品标题 %@" , product.localizedTitle);
  NSLog(@"产品描述信息: %@" , product.localizedDescription); 
  NSLog(@"价格: %@" , product.price);
  NSLog(@"Product id: %@" , product.productIdentifier);

}

 SKPayment *payment = nil; 
switch (buyType) {

 case IAP0p20: payment = [SKPayment paymentWithProductIdentifier:ProductID_IAP0p20]; //支付25 break; case 
IAP1p100: payment = [SKPayment paymentWithProductIdentifier:ProductID_IAP1p100]; //支付108 break; case 

IAP4p600: payment = [SKPayment paymentWithProductIdentifier:ProductID_IAP4p600]; //支付618 break; case 

IAP9p1000: payment = [SKPayment paymentWithProductIdentifier:ProductID_IAP9p1000]; //支付1048 break; 

case IAP24p6000: payment = [SKPayment 
paymentWithProductIdentifier:ProductID_IAP24p6000]; //支付5898 break; default: 
break;
} 
NSLog(@"---------发送购买请求------------");

 [[SKPaymentQueue defaultQueue] addPayment:payment];
}

- (void)requestProUpgradeProductData{

 NSLog(@"------请求升级数据---------"); 

NSSet *productIdentifiers = [NSSet setWithObject:@"com.productid"];
 SKProductsRequest* productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers]; 
productsRequest.delegate = self; 
[productsRequest start];}

//弹出错误信息
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error{ 

    NSLog(@"-------弹出错误信息----------"); 
    UIAlertView *alerView = [[UIAlertView alloc]initWithTitle:NSLocalizedString(@"Alert",NULL) message:[error localizedDescription] delegate:nil cancelButtonTitle:NSLocalizedString(@"Close",nil) otherButtonTitles:nil]; 
[alerView show];
}

-(void) requestDidFinish:(SKRequest *)request{

   NSLog(@"----------反馈信息结束--------------");

}

-(void) PurchasedTransaction: (SKPaymentTransaction *)transaction{ 

  NSLog(@"-----PurchasedTransaction----");

   NSArray *transactions =[[NSArray alloc] initWithObjects:transaction, nil]; 
  [ self paymentQueue:[SKPaymentQueue defaultQueue] updatedTransactions:transactions];

}

//<SKPaymentTransactionObserver>千万不要忘记绑定,代码如下:
//----监听购买结果
//[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions//交易结果{

 NSLog(@"-----paymentQueue--------"); 

  for (SKPaymentTransaction *transaction in transactions) { 
  switch (transaction.transactionState) { 
  case SKPaymentTransactionStatePurchased:{
//交易完成 [self  completeTransaction:transaction]; 

  NSLog(@"-----交易完成 --------");

 UIAlertView *alerView = [[UIAlertView alloc] initWithTitle:@"" message:@"购买成功" delegate:nil cancelButtonTitle:NSLocalizedString(@"关闭",nil) otherButtonTitles:nil];
   [alerView show]; 
} break;
 case SKPaymentTransactionStateFailed://交易失败 

{
 [self failedTransaction:transaction]; 
  NSLog(@"-----交易失败 --------"); 
  UIAlertView *alerView2 = [[UIAlertView alloc] initWithTitle:@"提示" message:@"购买失败,请重新尝试购买" delegate:nil cancelButtonTitle:NSLocalizedString(@"关闭",nil) otherButtonTitles:nil]; 
  [alerView2 show]; 
}break;
 
case SKPaymentTransactionStateRestored://已经购买过该商品 [self restoreTransaction:transaction];
   NSLog(@"-----已经购买过该商品 --------");
   case SKPaymentTransactionStatePurchasing: 
//商品添加进列表
 NSLog(@"-----商品添加进列表 --------");
 break
; default: 
break;
       } 
    }
}

- (void) completeTransaction: (SKPaymentTransaction *)transaction{ 
  NSLog(@"-----completeTransaction--------"); 
  // Your application should implement these two methods. NSString *product = transaction.payment.productIdentifier; 
  if ([product length] > 0) { 
    NSArray *tt = [product componentsSeparatedByString:@"."]; 
    NSString *bookid = [tt lastObject];
 if ([bookid length] > 0) { 
  [self recordTransaction:bookid]; [self provideContent:bookid];}
} 
  // Remove the transaction from the payment queue. [[SKPaymentQueue   defaultQueue] finishTransaction: transaction];
}

//记录交易
-(void)recordTransaction:(NSString *)product{
   NSLog(@"-----记录交易--------");

}

//处理下载内容
-(void)provideContent:(NSString *)product{ 
  NSLog(@"-----下载--------");
}

- (void) failedTransaction: (SKPaymentTransaction *)transaction{ 
  NSLog(@"失败"); 
  if (transaction.error.code != SKErrorPaymentCancelled) { } 
  [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
}

-(void) paymentQueueRestoreCompletedTransactionsFinished: (SKPaymentTransaction *)transaction{}- (void) restoreTransaction: (SKPaymentTransaction *)transaction{ 
  NSLog(@" 交易恢复处理");
}

-(void) paymentQueue:(SKPaymentQueue *) paymentQueue restoreCompletedTransactionsFailedWithError:(NSError *)error{ 
  NSLog(@"-------paymentQueue----");
}

#pragma mark connection delegate
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ 
  NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{}- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ switch([(NSHTTPURLResponse *)response statusCode]) {
  case 200:
  case 206: 
  break; 
  case 304: 
  break; 
  case 400: 
  break; 
  case 404:
  break; 
  case 416: 
  break; 
  case 403: 
  break; 
  case 401:
  case 500:
  break; 

default: 
break; 
}
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
   NSLog(@"test");
}

-(void)dealloc{ 
  [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
  //解除监听

}

@end

后记

苹果内购还是有不少问题的,还是需要和后台多多配合,例如,购买的时候默认的是当前登录的苹果id付款,如果想切换到别的id就会出现问题。。原来也没有退款流程,现在可以退款了,详细教程,以后我再说明吧。
ps:喜欢我的朋友多多支持,用你的小手点个喜欢或关注,就是对我最大的鼓励。🌹

相关文章

  • iOS开发 内购流程 手把手教你还不学?

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

  • iOS-内购

    前言:关于iOS内购,参考两篇博文 iOS-iOS内购流程(手把手图文教程)iOS内购你看我就够了(埋坑篇) 我自...

  • iOS 苹果内购流程

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

  • iOS支付

    支付宝支付 支付宝支付支付宝补充 微信支付 微信支付 内购 iOS开发 内购流程

  • iOS开发 内购流程

    一.向appStore提交资料第一步 第二步 第四步 第九步 第十三步 第十四步 第十六步 第二十一步 恭喜你现在...

  • iOS内购流程文档-Lion

    iOS内购流程: iOS内购 什么时候用到呢? 虚拟产品就需要用到iOS内购;购买的商品,是在本app中...

  • IOS内购服务端技术方案

    IOS内购服务端技术方案 IOS购买vip流程 IOS内购服务器模式的主要流程如下所示: 服务端验证注意点 苹果A...

  • iOS内购之服务器类型机制

    iOS开发中用到内购模式,一般都使用服务器类型机制,其基本流程如图:

  • 手把手教你如何搭建iOS项目基本框架

    手把手教你如何搭建iOS项目基本框架 手把手教你如何搭建iOS项目基本框架

  • 【7】iOS开发·内购流程

    说明:涉及到金额交易,苹果审核的一般严格许多。苹果在涉及需要支付中间币的购买必须走苹果内购(例:点券、钻石、K币等...

网友评论

  • 暴走的西瓜:你好,银行卡是要用visa卡还是一般的储值卡就可以的
  • 瓜而不皮很灵性:我支付的时候没有弹出系统的购买页面是什么情况?(就是系统那个包含价格商品名称和APPID的那个页面)
  • 272d4bc6083b:全是报错怎么解决?
  • BohrIsLay:vip按月收费,和按年收费,如果用户已订阅按月收费,删除app后,再次进入,此时还是可以进入vip购买页面,这个时候用户再选择按年收费购买,岂不是又另外收取年费,这个如何控制?
  • CoderLJW:内购的收款帐号可以是个人的吗?这个苹果方面有没有限制
  • 卓敦:你好,一个产品id只能对应一个金额吗,用户要自己输入购买数量的时候怎么搞
  • 谢谢生活:内购绑定的银行卡有什么要求吗?
  • 辣椒小鱼:兄弟,内购退款 啥时候开讲
  • ychen3022:请问一下,贷款还钱的话需要使用内购吗
  • 剪刀_石头_布:我想问一下。内购的钱什么时候公司才能收到。是有时间限制还是得有最低数额限制。这个限制是多少呢
  • 3fdb581ec682:请问一下大神,那个内购等级如何选择,都是默认选择等级四吗?还是都可以,对项目有影响吗
  • 敢去做:你好,内购测试显示支付成功了,我打包代码提交appStore时是不是要将上面写的测试代码删除。谢谢。
  • 阿拉斯加的狗:内购老出现 Environment: Sandbox 为啥啊 兄弟
  • 阿拉斯加的狗:有没有demo什么的啊 楼主
  • xiao晖:第一步,提交AppStore资料,需要评估审核吗,时间多久?或者是,当时填写好了,就能直接申请通过,进入第二部,添加内购商品。
    还有个问题,请教下:若想将内购支付的订单流水,对接到公司的后台,可以怎么处理?有相关的对接文档吗
  • 61d817c65aa8:请问。 如果屏蔽内购。 会不会因为虚拟物品没有获取方式被拒
  • LD_左岸:我的第三步 和您的截图一模一样 Addres line 1 cannot be more that 40 characters

    我看到 这个弹窗里的前两项 Legal Entity Name 和 Financial Name 也不是我们法人和资金持有人的名字 这两项我看填的都是公司名 这个就不用改了吧?

    就只是把Address Line 1里的东西删除一点 他不是提示超过40个字符了吗 我把Room 709删掉 就把地址改的简略一点 在40个字符以内 这样是不是就可以了呢?
    LD_左岸:还是说您的意思是: 我目前Address Line 1 这一行 这不报超过40个字符了吗 而且这一行里填写的地址 也是自动生成的 应该和我那个申请证书地址一样 我现在把这一行的东西 分成两部分 在Address Line 1这一行里填 城市名 在Address Line 2这一行里填具体的街道
  • 骑马纵天下:楼主现在人在吗?
  • 耀敬业:楼主,您好,我第一次做内购的项目,关于协议、税务和银行业务的填写,有点疑问:我公司为总公司做的内购项目,本人想在测试正式项目前写个测试demo,但是要绑定银行卡信息,这个我是要绑定总公司的银行卡吗,如果我先绑定个人的银行卡做测试,之后在更改银行卡信息可以吗。
  • 27639726f8b9:楼主您好,用当前的apple id 付款,那公司的平台怎么去获取这些购买数据呢?就是说,内购的时候,用户不登录平台账号就实现了购买,那这些购买收据平台怎么去获取? 不获取的话,用户即时充了值,也没法在平台付费使用啊? 麻烦回复我一下,感谢
  • 帅狗黑皮:我想问一下 那个内购成功之后能获取与用户有关的信息么 比如说我是用某个appleid支付的 然后会分配一个固定的ID 这个id能返回么
  • 谢谢生活:大神 我的兴建内购项目资料填完了的,但是第五步显示的是准备提交。这是什么鬼??
  • 住册新账号:楼主,最后的验证成功才能算这次支付成功吗?如果验证失败此次交易算失败?
  • 7d0b7c08da1d:楼主,内购凭证是什么?我刚刚被苹果解决。
  • 我是nil:你好,可以请教下苹果到账的流程吗?我们这半年有很多用户付费,但是财务说一直没有收到款项!而且开发者账号的付款与财务报告两个月之前的款项都显示结转! 急.....希望了解的大神分享下经验!
  • b13cd3e68764:请问如果是平台的VIP充值需要走内购吗?
  • 114105lijia:请问你们在集成内购的时候,在iOS10.2.1系统中遇到问题没有,我集成的在iOS10.2.1之前的设备上都没问题,但是在iOS10.2.1设备上就有问题了,在发送购买请求后,不能弹出输入AppleID密码的提示框,请问有人遇到过吗
  • 饥渴的狗崽子:您好,请问单个商品的价格有上线吗?我看网上有说有的,说什么游戏道具最高¥648,真是这样吗?我设置一个商品三五千不能过吗?
  • 叫我马小帅:您下载一个极客学院的APP看一下,为什么他的开通会员就可以用支付宝或者微信,不用内购
    谢谢生活:@嘿嘿嚯 哟西 都这样。
    9ea95b711416:也许是通过屏蔽支付内容,绕过审核,等上线后再显示支付内容:smiley:
  • 56d35fdf1a2a:楼主 我遇到一个问题 就是在itunes Connect里面创建的沙盒测试账号 为什么测试的时候输入这个账号会提示我验证账号呀。。。。
    56d35fdf1a2a:邮箱验证一次就可以使用了。。。(为什么之前没遇到过这种情况,搞不懂苹果的机制)
  • 41372c7b2bd0:楼主在吗,问一个关于内购的问题.
    内购的支付是APP和app Store之间的沟通,购买成功后,苹果那边会返回购买成功的订单号或者什么的给我我们自己的服务器吗? 我们的服务器这边怎么记录订单号?
    efe9adcb04ff:@studyIScool 我把交易成功的凭证 传给后台了,后台如何去苹果验证?
    我猜想:
    交易的凭证是 前台app从苹果后台拿取的数据,包括交易状态Status1,订单等等。post到app后台后,后台是拿订单号等再去苹果后台验证? 再次得到Status2.。
    Status1和 Status2 会不同吗?
    最后显示的状态已Status2 为准?

    目前:我只在前台app做了判断 Status == 0 就是交易成功,只是post了 订单给后台做记录, 没有让后台验证。
    很苦恼这个流程。。。。。
    41372c7b2bd0:@ZfRee 嗯嗯 谢谢,已经这么处理了
    ZfRee:你把交易成功的凭证 传给后台,由后台去苹果那验证,然后你处理后台的逻辑
  • 3d3750c3a7f8:楼主,请教个问题,app上线之前使用沙盒测试账号是可以购买的,但是上线之后使用自己的id为什么一直提示购买失败呢?
    nenhall:@究极魔法师 不能添加已在apple注册过的邮箱
    0x00chen:楼主添加沙箱技术测试员一直提示“此电子邮箱地址已与现有appleID关联”,这个是什么意思,急死我了
    未来可期me:@丶LNR 好了吗
  • 403cd85e800d:产品付费数量0是什么原因?
  • 超_iOS:我现在遇到用户的多次内购,他们的购买凭证都是一样的.这个楼主有什么想法么.想请教
  • 罗火火:问一下楼楼,app做会员收费应该是走内购吧?后台需要做什么工作呢?
  • f745c40d09c4:文章介绍了《协议、税务和银行业务》的填写,可见作者相当用心。写得相当详细了,如果能够把以下几点说的具体点就更好了:
    1. 对于非消耗型项目,restore 的处理逻辑
    2. 购买(用户角度):购买——>确认购买商品——>App Store账户验证——>苹果服务器验证用户请求——>苹果服务器从用户帐号扣款——>苹果向用户返回购买成功信息——>APP接收并显示用户购买信息,流程链中不涉及自己服务器而且由于对于用户的验证是苹果服务器处理的,所以导致付款用户与开发商用户的绑定关系存在问题。
    3. 笔者最后谈到的,apple id切换,以及退款。其实和我提的第二条有关系,具体展开肯定会聊到
    最后,感谢笔者分享

    kailee_kg:“对于非消耗型项目,restore 的处理逻辑”,是指监听购买结果,如果是已经购买过,则执行:
    [[SKPaymentQueue defaultQueue] finishTransaction: transaction];
    你提到的 “可消耗产品”,可以检查以下两点:
    1、https://itunesconnect.apple.com 这里的配置
    2、代码中监听购买结果:- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transaction;
    遇见____:你好,“对于非消耗型项目,restore 的处理逻辑”这一块怎么处理?我现在的问题是可消耗型产品,却无法二次购买
  • 61b921b1367d:Error Domain=SKErrorDomain Code=0 "无法连接到 iTunes Store" UserInfo={NSLocalizedDescription=无法连接到 iTunes Store}
    zeigler:@故事中的路人甲 怎么解决的?我也出现了这个问题
  • 61b921b1367d:仅用于测试内购的 app 用专门选择具有IAP功能的证书吗
  • footSInRoad:做苹果支付功能(患者给医生送花,一朵花一元钱) 支付宝等第三方,还需要设置Apple pay么?听别人说还需要设置apply pay 不然会被拒绝..是这样么?
    睡不着的叶:@何必轻言流年 只能用内购
    footSInRoad:我们用了 支付宝..
    何必轻言流年:@rensheng 借问,类似于送花 送礼物这种功能可以用支付宝等三方支付吗,有人跟我说只能用苹果的IAP
  • 56d35fdf1a2a:我现在只想做一下测试 就是还没有在app store中创建内购项目 那个商品信息可以随便创建吗
    睡不着的叶:@来自蒙塔基的罡蛋 对,可以的
    56d35fdf1a2a:@睡不着的叶 是不是显示准备提交的时候就可以做测试了
    睡不着的叶:@来自蒙塔基的罡蛋 可以创建。能请求回来商品信息就好
  • ea37bcb98761:内购了是不是就不能继承微信支付和支付宝支付了??
    吾本是喵:@码农冰冰 除了电商类的用微信被拒的几率很高
    码农冰冰:@睡不着的叶 我代码中要是既有内购又有微信支付和支付宝支付,但是上架的时候显示的是内购这样会被拒吗
    睡不着的叶:@我要喝酸奶了 嗯。对。那样很容易被拒绝
  • 左耳边的风声:为什么我的这个方法 - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response 请求到的数据response.products一直为空
    JoyHuang:@honeyCream 一样的too,你们解决了吗?
    5f7d549f2f99:@左耳边的风声 一样的问题~请问要怎么解决
    Tlee丶:@左耳边的风声 我的也是,解决了吗?
  • 4VZhang:希望向你了解下关于内购退款的问题.急急急!!!!
  • iOS_Xue:发布内购app有什么需要注意的吗?
    iOS_Xue:验证好支付凭据,给苹果的时候要提供测试账号,凭据先在测试环境验证,再去正式环境验证,否则苹果没法测试,其他的估计也没什么了
  • LonelyBanana:屌屌的
  • 3045e3688ec5:总感觉苹果内购很坑爹
    睡不着的叶:@丶Amarantine 必须滴,我现在就在爬坑

本文标题:iOS开发 内购流程 手把手教你还不学?

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