胡东东博客

App内购项目的App Store推广


之前说了《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发起购买的时候会有回调。

就像开发文档中说的

在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

当前页面是本站的「Baidu MIP」版。查看和发表评论请点击:完整版 »