ios应用内支付过程(使用苹果原生支付方式
来源:互联网 发布:卡祖笛 知乎 编辑:程序博客网 时间:2024/04/27 19:32
因为ios政策问题,如果开发者需要在ios客户端中加入购买(虚拟货币)项目,需要使用ios应用内付费IAP这种方式,这也是很多苹果APP不和安卓共通的原因。因为苹果需要抽取%30的利益,详细原因就不赘述。
当你需要使用苹果内付费这项功能,首先你要有一个开发者账号,如果是公司开发者则需要申请一个公司的开发者账号而非个人,涉及到邓白氏编码的申请,我会在之后的文章提到。当你有开发这账号时,先不用打开X-code,因为内购项目最复杂的部分不是代码部分而是繁杂项目的申请。首先你要登陆到 iTunescConnect"https://itunesconnect.apple.com",先新建一个测试内购的APP,点击我的APP,进入页面后点击左上角的+号按钮选择新建APP,填写平台IOS,名称和语言等,这里要说的是套装ID和SKU,SKU为你的此应用区别其他应用的标示符,你可以随便填写数字。而套装ID则需要去 https://developer.apple.com里的Member Center里申请,选择Certificates, Identifiers & Profiles,再选择IOS APP里的Certificates,进入页面左边选择APP IDs,点击右上角+号,App ID Description随意填写一个name,在Bundle ID里填写格式如下的名字com.XXX.XX,这里最后一个字段一定要写唯一标识符,如com.pokhara.ipa。然后continue提交之后就OK了。注意这里的Bundle ID必须和你之后工程里的Bundle ID相同。然后回到前面新建APP里将这个Bundle ID填进去,新建好一个APP,至此内购的五大步骤的第一步就实现了。</p><p>第二步就是填写银行账户信息,就是你用来收款的一些信息。回到iTunescConnect,选择协议、税务和银行业务,这里必须填写详细。详细信息咨询你的公司会计吧,毕竟你是程序员。。。如果你的银行信息填写完毕后银行这个页面的表格应该显示的都是set up的样子</p><p>第三步是为你的APP增加内购项目,点击你新建的APP项目。点击导航栏上的功能你会看到APP内购买项目,点击+号。选择消耗性项目(如打怪金币,QQ斗地主欢乐豆,可以重复购买),参考名称可以随意,但是产品ID一定要记住,最好写成com.项目名.coinXX这样,方便你记录。价格等级对应的是你的内购项目的价格。Tier 1对应的就是US$0.99也就是大概6元人民币。选择语言里的显示语言就是你想显示的商品名称,提交一个正确格式的截图,这一步就算搞定了。回到APP内购买项目里回发现这个商品已经被添加了,你会看到一个准备提交的黄色按钮或者绿色按钮或者。。。(作者色盲,不好意思,不过,不重要!),因为这时候我们已经可以用它测试了,还差最后一步就可以打开久违的X-code了。</p><p>第四步,申请沙箱测试员,因为是模拟支付环境所以需要回到iTunescConnect,选择用户和职能,沙箱技术测试员,随意添加一个,记住账号密码就OK了,如果提醒你账号已经和APPstore绑定了就随便编一个邮箱账号就OK了。申请完毕,ios 应用内付费就基本大功告成。</p><p></p><p>第五步,打开Xcode填写上刚申请的Budle ID,然后就是自己写一个购买界面,加入代理点击事件上代码</span></p><pre name="code" class="objc">- (void)viewDidUnload { [super viewDidUnload]; [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];}-(void)clik:(id)sender{ if ([SKPaymentQueue canMakePayments]) { // 执行下面提到的第5步: [self getProductInfo]; } else { NSLog(@"失败,用户禁止应用内付费购买."); }}// 下面的ProductId应该是事先在itunesConnect中添加好的,已存在的付费项目。否则查询会失败。- (void)getProductInfo { NSSet * set = [NSSet setWithArray:@[@"com.shuhai.coin1500"]]; SKProductsRequest * request = [[SKProductsRequest alloc] initWithProductIdentifiers:set]; request.delegate = self; [request start];}// 以上查询的回调函数- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response { NSArray *myProduct = response.products; if (myProduct.count == 0) { NSLog(@"无法获取产品信息,购买失败。"); return; } SKPayment * payment = [SKPayment paymentWithProduct:myProduct[0]]; [[SKPaymentQueue defaultQueue] addPayment:payment];}- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions { for (SKPaymentTransaction *transaction in transactions) { switch (transaction.transactionState) { case SKPaymentTransactionStatePurchased://交易完成 NSLog(@"transactionIdentifier = %@", transaction.transactionIdentifier); [self completeTransaction:transaction]; break; case SKPaymentTransactionStateFailed://交易失败 [self failedTransaction:transaction]; break; case SKPaymentTransactionStateRestored://已经购买过该商品 [self restoreTransaction:transaction]; break; case SKPaymentTransactionStatePurchasing: //商品添加进列表 NSLog(@"商品添加进列表"); break; default: break; } }}- (void)completeTransaction:(SKPaymentTransaction *)transaction { // Your application should implement these two methods. NSString * productIdentifier = transaction.payment.productIdentifier;// NSString * receipt = [transaction.transactionReceipt base64EncodedString]; if ([productIdentifier length] > 0) { // 向自己的服务器验证购买凭证 } // Remove the transaction from the payment queue. [[SKPaymentQueue defaultQueue] finishTransaction: transaction]; }- (void)failedTransaction:(SKPaymentTransaction *)transaction { if(transaction.error.code != SKErrorPaymentCancelled) { NSLog(@"购买失败"); } else { NSLog(@"用户取消交易"); } [[SKPaymentQueue defaultQueue] finishTransaction: transaction];}- (void)restoreTransaction:(SKPaymentTransaction *)transaction { // 对于已购商品,处理恢复购买的逻辑 [[SKPaymentQueue defaultQueue] finishTransaction: transaction];}其中NSSet * set = [NSSet setWithArray:@[@"XXXXXX"]];为你购买项目的ID;注意用真机测试,在手机设置的iTunes Store与App Store,注销掉你之前的账号,登陆你的沙箱测试员账号测试。
至此,结束。有问题欢迎指正交流。541370008@qq.com
viewdidload加一句
[[SKPaymentQueuedefaultQueue]addTransactionObserver:self];
0 0
- ios应用内支付过程(使用苹果原生支付方式
- iOS应用里面包含虚拟商品,支付必须使用苹果内购方式
- 苹果应用内支付(iOS IAP)的流程与常用攻击方式
- 【读书笔记】iOS-使用应用内支付注意事项
- iOS 应用内支付(IAP)
- IOS苹果内支付iap Java服务端
- 苹果内支付
- iOS应用内支付(内购)
- 苹果不允许 iOS 应用内置购买(IAP)使用第三方支付方式,那么跨平台的支付怎么解决这个问题?
- iOS程序生命周期,苹果内购、微信支付、支付宝支付
- IOS-IAP 苹果支付
- iOS应用内支付的那些坑
- iOS应用内支付(IAP)的注意事项
- iOS应用内支付的那些坑
- iOS应用内支付(IAP)开发步骤
- iOS应用内支付(IAP)的注意事项
- iOS开发应用内支付总结
- IAP -- iOS应用内支付 _-唐巧
- [转载文章] 解析漏洞总结
- Climbing Stairs
- MapReduce性能优化_2. 诊断 Map 端性能瓶颈
- 【转】shell awk 入门
- ios创建的sqlite数据库文件如何从ios模拟器中导出
- ios应用内支付过程(使用苹果原生支付方式
- socket通信二
- “按需加载”的应用
- c++ primer plus 第六章变成练习 第一题
- 那些史上留名的软件 bug 们
- 使用Intellij将项目发布到Tomcat中
- android 事件总线 -- Otto(六) Bus
- Gradle的Properties
- proxool连接池配置