APPStore 内购

作者: leafu | 来源:发表于2019-10-21 19:30 被阅读0次

    记录首次使用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

    相关文章

      网友评论

        本文标题:APPStore 内购

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