iOS苹果内购(详细步骤)

一.设置付费协议

1.进入开发者平台,点击如下图所示:

image.png

设置

2.查看付费同意条款

image.png

  1. 设置付费协议

image.png

添加这3个信息

4.添加银行账户

image.png

5.选择报税表

image.png

默认美国

6.根据报税表填写报税情况,根据自己实际情况,在这里我们需要选择NO,后面选了几个勾,以为可以,后面报错了!

image.png

三者必须填写 注意:这里可以随便填写。

7.填写联系人,这几个部分可以填写同一人

image.png

二.添加内购项目
  1. 点击添加

image.png

2.选择内购项目类型

image.png

根据功能选择

3.设置产品价格及名称

image.png

4.显示信息

image.png

5.审核信息

image.png

注意:这些信息都要填完整,否则会提示元数据丢失。

image.png

内购项目

三.创建沙盒技术测试号

image.png

添加账号

image.png

三.代码集成

在需要购买的控制器内

#import <StoreKit/StoreKit.h>
@interface HomeViewController ()<SKProductsRequestDelegate,SKPaymentTransactionObserver>

@end
- (void)viewDidLoad {
    [super viewDidLoad];
 UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"总共免费使用5次,已消耗完" message:@"付费后可无限次使用" preferredStyle:UIAlertControllerStyleAlert];
        [alert addAction:[UIAlertAction actionWithTitle:@"付费" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
            [IHUtility addWaitingView:@"支付中"];
            //监听购买结果
            [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
            if([SKPaymentQueue canMakePayments]){
                [self requestProductData:@"com.IntelligentNetwork.QuickIdentificationDiagram.purchase1"];
            }else{
                NSLog(@"不允许程序内付费");
            }
        }]];
        [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]];
        // 弹出对话框
        [self presentViewController:alert animated:true completion:nil];
}
//去苹果服务器请求商品
- (void)requestProductData:(NSString *)type{
    
    NSArray *product = [[NSArray alloc] initWithObjects:type,nil];
    NSSet *nsset = [NSSet setWithArray:product];
    SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:nsset];
    request.delegate = self;
    [request start];
}

//收到产品返回信息
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
    
    NSLog(@"--------------收到产品反馈消息---------------------");
    NSArray *product = response.products;
    NSLog(@"productID:%@", response.invalidProductIdentifiers);
    if(product.count==0){
        [WHToast showMessage:@"查找不到商品信息"  duration:1 finishHandler:^{
        }];
        return;
    }
    [IHUtility addWaitingView:@"支付中"];
    SKProduct *p = nil;
    for(SKProduct *pro in product) {
        NSLog(@"%@", [pro description]);
        NSLog(@"%@", [pro localizedTitle]);
        NSLog(@"%@", [pro localizedDescription]);
        NSLog(@"%@", [pro price]);
        NSLog(@"%@", [pro productIdentifier]);
        
        if([pro.productIdentifier isEqualToString: @"com.IntelligentNetwork.QuickIdentificationDiagram.purchase1"]){
            p = pro;
        }
    }
    SKPayment *payment = [SKPayment paymentWithProduct:p];
    NSLog(@"发送购买请求");
    [[SKPaymentQueue defaultQueue] addPayment:payment];
}

//请求失败
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error{
    [IHUtility removeWaitingView];
    [WHToast showMessage:@"支付失败"  duration:1 finishHandler:^{
    }];
}

- (void)requestDidFinish:(SKRequest *)request{
    [IHUtility removeWaitingView];
}

//监听购买结果
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transaction{
    [IHUtility removeWaitingView];
    for(SKPaymentTransaction *tran in transaction){
        [self verifyPurchaseWithPaymentTransaction:[NSNumber numberWithInt:tran.transactionState]];
        switch(tran.transactionState) {
            case SKPaymentTransactionStatePurchased:{
                [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"buyed"];
                [[SKPaymentQueue defaultQueue] finishTransaction:tran];
            }
                break;
            case SKPaymentTransactionStatePurchasing:
                break;
            case SKPaymentTransactionStateRestored:{
                [[SKPaymentQueue defaultQueue] finishTransaction:tran];
            }
                break;
            case SKPaymentTransactionStateFailed:{
                [[SKPaymentQueue defaultQueue] finishTransaction:tran];
                [WHToast showMessage:@"购买失败"  duration:1 finishHandler:^{
                }];
            }
                break;
            default:
                break;
        }
    }
}

//交易结束
- (void)completeTransaction:(SKPaymentTransaction *)transaction{
    NSLog(@"交易结束");
    [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
    
}


- (void)dealloc{
    [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
}

-(void)verifyPurchaseWithPaymentTransaction:(NSNumber*)resultState{
    //从沙盒中获取交易凭证并且拼接成请求体数据
    NSURL *receiptUrl=[[NSBundle mainBundle] appStoreReceiptURL];
    NSData *receiptData=[NSData dataWithContentsOfURL:receiptUrl];
}

四.注意事项
1.内购必须用真机测试
2.测试时必须退出App Store自己的Apple ID,登录沙盒的测试Apple ID .
3.本身请求美国服务器就慢,为防止审核人员误解,我们需要在购买时加载动画。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
uniapp是一种跨平台的应用开发框架,可以同时开发iOS和Android应用。在uniapp中实现iOS内购需要按照以下步骤进行操作: 1. 首先,在iTunes Connect(https://appstoreconnect.apple.com/)应用后台登录并创建App内购项目,在此过程中需要设置税务和银行卡等配置信息。 2. 然后,在HbuilderX中勾选Apple应用内支付选项。这样可以在uniapp中使用内购功能。 3. 接下来,根据uniapp的支付文档(https://uniapp.dcloud.net.cn/api/plugins/payment.html#requestpayment),使用相应的API进行支付操作。uniapp提供了一些插件,可以方便地实现支付功能。 需要注意的是,iOS内购与Apple Pay是不同的概念。Apple Pay是一种支付方式,类似于支付宝和微信支付,而iOS内购是指在iPhone应用中购买虚拟物品(例如QQ币、鱼翅、电子书等)。 总结来说,要在uniapp中实现iOS内购,需要在iTunes Connect创建内购项目,勾选HbuilderX中的Apple应用内支付选项,并参考uniapp的支付文档进行相应的开发。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [uniapp苹果内购总结](https://blog.csdn.net/weixin_37391237/article/details/126409915)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [iOS内购与apple pay](https://download.csdn.net/download/u011189314/14110233)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值