iOS基础

APPStore 内购

2019-10-21  本文已影响0人  leafu

记录首次使用APP内购流程中所遇到的一些问题,已经开发步骤,理解内购使用的相关配置:

  1. 什么是沙盒账号?
  2. 什么是productIdentifiers(NSSet)?
  3. Merchant IDs是什么及其配置?

什么是沙盒账号?

沙盒账号是在使用内购时,在itunesconnect后台所创建的账号,主要是用来进行内购时的购买所用,不能是已经绑定过iCloud的账号,建议用公司个人账号。下面演示如何创建沙盒账号

1、进入itunesconnect后台->选择“用户和访问”
1571653629044.jpg
2、在“用户和访问”界面选择“沙盒”->点击“➕”
1571653733113.jpg
3、在弹出的信息框中填写相关资料,填写完后点击邀请
屏幕快照 2019-10-21 下午6.31.44.png

什么是productIdentifiers(NSSet)?

可以看到,这是一个集合类型,里面其实就是包含着商品的ID,在初始化SKProductsRequest类时需要使用到,我的做法是把产品都在本地写死,点击商品是进行单个的商品请求,当然,也可以把所有的商品ID添加在里面进行初始化。如下图的ID:


1571654399378.jpg

Merchant IDs是什么及其配置?

这个IDs是专门用来做内购的,具体配置如下:

1、进入苹果开发者后台->选择“ Identifiers”
Certificates__Identifiers___Profiles_-_Apple_Developer.png
2、点击添加"+"->选择Merchant IDs
Certificates__Identifiers___Profiles_-_Apple_Developer2.png
3、在新出现的界面填写好描述以及Merchant IDs,填写完成后点击"continue"提交
Certificates__Identifiers___Profiles_-_Apple_Developer3.png
4、回到证书管理界面->点击" Identifiers"选项卡->点击创建好的Identifiers
Certificates__Identifiers___Profiles_-_Apple_Developer4.png
5、进入到Edit your App ID Configuration界面->开启apply pay ->点击Edit->选择刚刚创建的Merchant IDs点击continue->回到Edit your App ID Configuration界面保存
Certificates__Identifiers___Profiles_-_Apple_Developer5.png
Certificates__Identifiers___Profiles_-_Apple_Developer6.png
6、至此,Merchant IDs于应用bundleID已经绑定成功,重新更新Profile描述文件,一定要重新下载更新Profile文件

确认下面列表已准备完善

1、测试真机一台,据说不能用越狱机,没有试过
2、测试沙盒账号
3、Merchant IDs已绑定
4、内购产品已添加成功,状态为"准备提交"

好了,一切就绪,接下来就是开始开发流程了

Xcode开启Apple Pay,填写Merchant IDs

iim_xcodeproj_和_简书_-_写文章.png

开启Apple pay之后,就进入代码部分了,以下是代码清单

#import "APPStorePayManager.h"
@interface APPStorePayManager ()<SKProductsRequestDelegate,SKPaymentTransactionObserver>
@property (nonatomic, copy) ApplePayBlock success;
@property (nonatomic, copy) ApplePayBlock fail;
@property (nonatomic, strong)SKProductsRequest *productsRequest;
@end

@implementation APPStorePayManager

- (instancetype)init
{
    self = [super init];
    if (self) {
        [[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    }
    return self;
}
- (void)WakeUpTheApplePayWithProduct:(NSString*)products Success:(ApplePayBlock)success fail:(ApplePayBlock)fail{
    BOOL iap = [SKPaymentQueue canMakePayments];
         if (iap) {
             NSSet * set = [NSSet setWithObjects:products,nil];
                _productsRequest = [[SKProductsRequest alloc]initWithProductIdentifiers:set];
                _productsRequest.delegate = self;
             [_productsRequest start];
             _success = success;
             _fail = fail;
         } else {
//             NSLog(@"不可以购买");
             _fail(@"不可以购买");
         }
    
}
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions {
    for (SKPaymentTransaction *tran in transactions) {
    switch (tran.transactionState) {
                    case SKPaymentTransactionStatePurchased:
                        {
                            NSLog(@"交易完成");
                            [[SKPaymentQueue defaultQueue] finishTransaction:tran];
                            if (_success!=nil) {
                                _success(@"交易完成");
                            }
                            
                        }
                        break;
                    case SKPaymentTransactionStatePurchasing:
                        {
                            NSLog(@"商品添加进列表");
                        }
                        break;
                    case SKPaymentTransactionStateRestored:
                        {
                            NSLog(@"已经购买过商品");
                           if (_success!=nil) {
                               _success(@"已经购买过商品");
                           }
                            [[SKPaymentQueue defaultQueue] finishTransaction:tran];
                        }
                        break;
                    case SKPaymentTransactionStateFailed:
                        {
                            NSLog(@"交易失败");
                            if (_fail!=nil) {
                                _fail(@"交易失败");
                            }
                            [[SKPaymentQueue defaultQueue] finishTransaction:tran];
                        }
                        break;
                    default:
                        {
                            [[SKPaymentQueue defaultQueue] finishTransaction:tran];
                        }
                        break;
                }

    }
}
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
    NSArray *rProducts = response.products;
    if (rProducts.count > 0) {
       SKMutablePayment *payment = [SKMutablePayment paymentWithProduct:rProducts.lastObject];
       [[SKPaymentQueue defaultQueue]addPayment:payment];
    }
}
@end

至此over

上一篇下一篇

猜你喜欢

热点阅读