100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > ios应用内支付过程(使用苹果原生支付方式

ios应用内支付过程(使用苹果原生支付方式

时间:2018-10-20 12:53:39

相关推荐

ios应用内支付过程(使用苹果原生支付方式

因为ios政策问题,如果开发者需要在ios客户端中加入购买(虚拟货币)项目,需要使用ios应用内付费IAP这种方式,这也是很多苹果APP不和安卓共通的原因。因为苹果需要抽取%30的利益,详细原因就不赘述。

当你需要使用苹果内付费这项功能,首先你要有一个开发者账号,如果是公司开发者则需要申请一个公司的开发者账号而非个人,涉及到邓白氏编码的申请,我会在之后的文章提到。当你有开发这账号时,先不用打开X-code,因为内购项目最复杂的部分不是代码部分而是繁杂项目的申请。

首先你要登陆到 iTunescConnect"",先新建一个测试内购的APP,点击我的APP,进入页面后点击左上角的+号按钮选择新建APP,填写平台IOS,名称和语言等,这里要说的是套装ID和SKU,SKU为你的此应用区别其他应用的标示符,你可以随便填写数字。而套装ID则需要去 里的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,至此内购的五大步骤的第一步就实现了。

第二步就是填写银行账户信息,就是你用来收款的一些信息。回到iTunescConnect,选择协议、税务和银行业务,这里必须填写详细。详细信息咨询你的公司会计吧,毕竟你是程序员。。。如果你的银行信息填写完毕后银行这个页面的表格应该显示的都是set up的样子

第三步是为你的APP增加内购项目,点击你新建的APP项目。点击导航栏上的功能你会看到APP内购买项目,点击+号。选择消耗性项目(如打怪金币,QQ斗地主欢乐豆,可以重复购买),参考名称可以随意,但是产品ID一定要记住,最好写成com.项目名.coinXX这样,方便你记录。价格等级对应的是你的内购项目的价格。Tier 1对应的就是US$0.99也就是大概6元人民币。选择语言里的显示语言就是你想显示的商品名称,提交一个正确格式的截图,这一步就算搞定了。回到APP内购买项目里回发现这个商品已经被添加了,你会看到一个准备提交的黄色按钮或者绿色按钮或者。。。(作者色盲,不好意思,不过,不重要!),因为这时候我们已经可以用它测试了,还差最后一步就可以打开久违的X-code了。

第四步,申请沙箱测试员,因为是模拟支付环境所以需要回到iTunescConnect,选择用户和职能,沙箱技术测试员,随意添加一个,记住账号密码就OK了,如果提醒你账号已经和APPstore绑定了就随便编一个邮箱账号就OK了。申请完毕,ios 应用内付费就基本大功告成。

第五步,打开Xcode填写上刚申请的Budle ID,然后就是自己写一个购买界面,加入代理点击事件上代码

#import <StoreKit/StoreKit.h>

- (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]addTransactionObserver:self];

[[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,注销掉你之前的账号,登陆你的沙箱测试员账号测试。

viewdidload加一句

[[SKPaymentQueuedefaultQueue] addTransactionObserver:self];

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。