之前说了《iOS的应用内支付In-app purchase的开发》,说明了App内购项目的流程,今天说一下内购项目在App Store的推广和支持方式
在App Store中搜索某个软件的时候,比如QQ浏览器,在搜索列表和详情中都会显示内购的项目,下面就说一下如何配置。
App Store后台内购项目的配置
首先选择需要显示的内购项目,将该内购项目中的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的订单,你可以后续自己处理这个订单
在App Store推广购买和用户手动点击购买的区别:
用户在应用中自己点击购买
如果用户在你应用中手动点击购买,那么就是调用的支付,自己创建订单和请求
- (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的推广中购买
如果是在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
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/918.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!
5 条评论
你好,如果促销兑换码,启动应用以后是否购买的回调触发了,但是这个时候还没有登录,没有登录信息这么办,有没有办法后面登录完,主动触发这个促销购买
最简单的办法就是保存购买状态,登陆之后读取状态
想问下博主关于促销内购的一些问题。方便加QQ聊聊吗
可以,QQ544712635
QQ 734671352