蘋果內購小結

2021-01-25  本文已影响0人  iOS阿能

記錄從配置到上架

1、App Store把協議部分填寫完成,包含報稅那些
2、證書配置對應,以及設置沙盒人員
3、創建內購產品(一定要搞完協議那些再創建,否則代碼無法使用,如果順序錯了的話,可以重新生成證書)
4、使用YQInAppPurchaseTool(github上面有)
5、代碼執行
6、內購成本,本地保存秘鑰,如果調用後端接口成功,標記為成功,否則下次啟動APP繼續調用後端的接口(防失敗案例)
先請求內購商品是否可用

- (void)pay{
    //-----------获取单例
    YQInAppPurchaseTool *IAPTool = [YQInAppPurchaseTool defaultTool];
    //-----------设置代理
    IAPTool.delegate = self;
    //向苹果询问哪些商品能够购买,測試階段是要多個,真正使用的時候只要傳一個商品就行了
    [IAPTool requestProductsWithProductArray:@[@"product2",@"test1",@"test2"]];
}

從已可用商品,進行購買

#pragma mark - YQInAppPurchaseToolDelegate

//-----------实现代理
//IAP工具已获得可购买的商品
-(void)IAPToolGotProducts:(NSMutableArray *)products {
    NSLog(@"GotProducts:%@",products);
    dispatch_async(dispatch_get_main_queue(), ^{
        if (products.count == 0) {
            [DFLoadingView hideTitle:@"沒有可購買的商品"];
            return;
        }
        SKProduct *product = products.firstObject;
        //请求购买商品
        [[YQInAppPurchaseTool defaultTool]buyProduct:product.productIdentifier];
        //请求恢复商品(永久性商品)(也可直接再次购买,系统会提示不用扣费)
//        [[YQInAppPurchaseTool defaultTool] restorePurchase];
    });
}
//支付失败/取消
-(void)IAPToolCanceldWithProductID:(NSString *)productID {
    NSLog(@"canceld:%@",productID);
}
//支付成功了,并开始向苹果服务器进行验证(若CheckAfterPay为NO,则不会经过此步骤)
-(void)IAPToolBeginCheckingdWithProductID:(NSString *)productID {
    NSLog(@"BeginChecking:%@",productID);
}
//商品被重复验证了
-(void)IAPToolCheckRedundantWithProductID:(NSString *)productID {
    NSLog(@"CheckRedundant:%@",productID);
}
//商品完全购买成功且验证成功了。(若CheckAfterPay为NO,则会在购买成功后直接触发此方法)
-(void)IAPToolBoughtProductSuccessedWithProductID:(NSString *)productID
                                            andInfo:(NSDictionary *)infoDic {
    NSLog(@"BoughtSuccessed:%@",productID);
    NSLog(@"successedInfo:%@",infoDic);
}
//商品购买成功了,但向苹果服务器验证失败了
//2种可能:
//1,设备越狱了,使用了插件,在虚假购买。
//2,验证的时候网络突然中断了。(一般极少出现,因为购买的时候是需要网络的)
-(void)IAPToolCheckFailedWithProductID:(NSString *)productID
                                 andInfo:(NSData *)infoData {
    NSLog(@"CheckFailed:%@",productID);
}
//恢复了已购买的商品(仅限永久有效商品)
-(void)IAPToolRestoredProductID:(NSString *)productID {
    NSLog(@"Restored:%@",productID);
}
//内购系统错误了
-(void)IAPToolSysWrong {
    NSLog(@"SysWrong");
}


#pragma mark - getter

- (DFPayTitleScrollView *)payTitleScrollView {
    if (!_payTitleScrollView) {
        _payTitleScrollView = [DFPayTitleScrollView payTitleScrollView];
    }
    return _payTitleScrollView;
}

上一篇下一篇

猜你喜欢

热点阅读