記錄從配置到上架
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;
}
网友评论