转载自:http://blog.hudongdong.com/ios/918.html
之前说了《iOS的应用内支付In-app purchase的开发》,说明了App内购项目的流程,今天说一下内购项目在App Store的推广和支持方式
在App Store中搜索某个软件的时候,比如QQ浏览器,在搜索列表和详情中都会显示内购的项目,下面就说一下如何配置。
首先选择需要显示的内购项目,将该内购项目中的App Store推广的图片上传一下
然后到App Store推广中,选择需要推广的项目展示
如果你看到了上面黄色的提示
无法在 App Store 上宣传这些 App 内购买项目,因为您最新的已批准二进制文件中不包含 SKPaymentTransactionObserver 方法。
那就是因为没有在代码中实现这个代理,这里以《iOS的应用内支付In-app purchase的开发》中写的支付类HDPayTools为例
首先在HDPayTools中,实现- (BOOL)paymentQueue:(SKPaymentQueue *)queue shouldAddStorePayment:(SKPayment *)payment forProduct:(SKProduct *)product
这个代理函数,这个是在App Store发起购买的时候会有回调。
就像开发文档中说的
true
,那就是在打开app时直接调用购买确认的弹窗,让用户输入密码或者指纹等确认购买false
,那就是只打开app,但是并不会直接调用购买的弹窗,相当于只是给了你一个product的订单,你可以后续自己处理这个订单如果用户在你应用中手动点击购买,那么就是调用的支付,自己创建订单和请求
- (void)startPayWithProductID:(NSString *)productID withCompleteHandler:(paySuccess)paySuccessHandler {
//下单
[SVProgressHUD showWithStatus:nil];
self.paySuccessHandler = paySuccessHandler;
self.m_productID = productID;
NSSet *productIDs = [NSSet setWithObject:_m_productID];
SKProductsRequest *request= [[SKProductsRequest alloc] initWithProductIdentifiers:productIDs];
request.delegate = self;
[request start];
}
如果是在App Store推广购买,那么就是苹果直接创建好了订单和请求,然后直接在回调函数中返回给你,如果这个回调函数返回值为true
,那么就是直接发起了购买请求,如果返回值为false
,就是取消了这个购买请求,返回值相当于[request start];
这一步
这两种方式只是发起的方式不同,其他购买流程是一样的,不需要再重新写,在这个回调中只需要根据返回值去决定是否直接弹出购买。
所以那个回调函数的实现可以按照下面这样来写,写在HDPayTools.m中:
//从App Store支付
- (BOOL)paymentQueue:(SKPaymentQueue *)queue shouldAddStorePayment:(SKPayment *)payment forProduct:(SKProduct *)product {
self.paySuccessHandler = ^(BOOL paySuccess) {
if (paySuccess) {
///在这个回调中去实现购买之后的流程
///...
[SVProgressHUD showSuccessWithStatus:@"购买成功"];
}
};
//根据product.productIdentifier去判断是否去直接弹出购买弹窗
if ([product.productIdentifier isEqualToString:kHDHighVipProduct]) {
return true;
}
return false;
}
既然监听的实现写好了,那么就需要去监听App Store发起支付时的回调了,在AppDelegate.m
中,在程序打开时候去创建一个监听者,因为我已经在HDPayTools 的init中,直接写了[[SKPaymentQueue defaultQueue] addTransactionObserver: self];
,所以只要初始化就行了
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if (!self.payTools) {
self.payTools = [[HDPayTools alloc] init];
}
//....
}
这样就可以了,当有App Store发起购买的时候,就可以监听到了。
修改下面的链接地址,然后在safari浏览器打开,就可以测试从App Store发起购买了。其中链接中的bundleId
修改为你自己应用的bundleId,比如com.hudongdong.blog,productId
修改为你创建的商品的id
itms-services://?action=purchaseIntent&bundleId=bundleId
&productIdentifier=productId
版权属于:胡东东博客
本文链接:http://blog.hudongdong.com/ios/918.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!无视该版权声明,后果自负
★★点下方的广告支持我一下吧↓↓↓↓↓↓