阅读 32

SKStoreProductViewController -- 不跳转App Store 应用内直接下载、评论应用

#### 不跳转App Store 应用内直接下载应用

SKStoreProductViewController 这个类需要了解下。

/* View controller to display iTunes Store product information */
SK_EXTERN_CLASS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED @interface SKStoreProductViewController : UIViewController
复制代码

官方解释:用于展示iTunes Store 商品信息的类,继承自UIViewController。

使用

1.导入头文件:#import <StoreKit/StoreKit.h>

2.初始化类,设置代理SKStoreProductViewControllerDelegate,展示VC。必须使用Present VC方式

        SKStoreProductViewController *storeVC = [[SKStoreProductViewController alloc] init];
        //设置代理 SKStoreProductViewControllerDelegate
        storeVC.delegate = self;
        [self presentViewController:storeVC animated:YES completion:nil];
复制代码

3.请求Store 信息。 必须在展示VC之后再请求

    /** presentVC 之后再调取加载Store方法 官方备注:
     // Load product view for the product with the given parameters.  See below for parameters (SKStoreProductParameter*).
     // Block is invoked when the load finishes.
     */
        [storeVC loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier : @"1131090631"} completionBlock:^(BOOL result, NSError * _Nullable error) {
            if (error) {
                NSLog(@"error = %@", error);
            }else {
                NSLog(@"显示完成");
            }
        }];
复制代码

3.1.如果你不想整个界面就单单的弹出这个下载界面,还想在这加点自己的东西,也是可以自定义视图的。 改变SKStoreProductViewController的frame。

    SKStoreProductViewController *storeVC = [[SKStoreProductViewController alloc] init];
    storeVC.delegate = self;
    NSDictionary *appDict = @{SKStoreProductParameterProductIdentifier : @"appid" };
    [storeVC loadProductWithParameters:appDict completionBlock:^(BOOL result, NSError * _Nullable error) {
        if (result) {
            [self presentViewController:storeVC animated:YES completion:^{
                //如果这里我想自定义一个类似于Banner的视图
                UIImageView *bannerImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 260)];
                bannerImage.image = [UIImage imageNamed:@""];
                [storeVC.view.superview addSubview:bannerImage];
                //修改展示App Store的frame
                storeVC.view.frame = CGRectMake(0, 300, self.view.frame.size.width, self.view.frame.size.height - 260);
            }];
        }else if (error) {
            NSLog(@"加载失败le");
        }
    }];
复制代码

具体请求的Paramters ,可以点进去看下具体是什么:

// iTunes Store item identifier (NSNumber) of the product
SK_EXTERN NSString * const SKStoreProductParameterITunesItemIdentifier NS_AVAILABLE_IOS(6_0);

// SKU for the In-App Purchase product (NSString) to render at the top of the product page
SK_EXTERN NSString * const SKStoreProductParameterProductIdentifier NS_AVAILABLE_IOS(11_0);

// Analytics provider token (NSString)
SK_EXTERN NSString * const SKStoreProductParameterProviderToken NS_AVAILABLE_IOS(8_3);

// Advertising partner token (NSString)
SK_EXTERN NSString * const SKStoreProductParameterAdvertisingPartnerToken NS_AVAILABLE_IOS(9_3); NS_AVAILABLE_IOS(6_0);

// SKU for the In-App Purchase product (NSString) to render at the top of the product page
SK_EXTERN NSString * const SKStoreProductParameterProductIdentifier NS_AVAILABLE_IOS(11_0);

// iTunes Store affiliate token (NSString)
SK_EXTERN NSString * const SKStoreProductParameterAffiliateToken NS_AVAILABLE_IOS(8_0);

// iTunes Store affiliate campaign token (NSString)
SK_EXTERN NSString * const SKStoreProductParameterCampaignToken NS_AVAILABLE_IOS(8_0);

// Analytics provider token (NSString)
SK_EXTERN NSString * const SKStoreProductParameterProviderToken NS_AVAILABLE_IOS(8_3);

// Advertising partner token (NSString)
SK_EXTERN NSString * const SKStoreProductParameterAdvertisingPartnerToken NS_AVAILABLE_IOS(9_3);
复制代码

App Store 参数:SKStoreProductParameterITunesItemIdentifier , 值就是的应用ID(纯数字即可,不要id)。eg: itunes.apple.com/cn/app/gear… 这里只取:1131090631.

4.实现代理方法, dismiss VC

- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController {
    //点击完成或是下载更新完成的回调,dismiss掉VC
    [viewController dismissViewControllerAnimated:YES completion:nil];
}
复制代码

至此,应用内下载更新应用完成。

貌似在iOS 12系统上请求比较慢.issue 这个方法没用系统跳转慢

Tips : 拓展

可以点到这里看下<StoreKit/StoreKit.h>, 还有SKStoreReviewController.h, SKProductStorePromotionController具体可以研究下。

后续研究的SKStoreReviewController

这个是apple在iOS10.3推出的新内容,在应用内给App评分。 这个方法一年之内最多使用三次,但是如果需求想让用户评论,感觉一年三次这个限制太少了。 详情请看官方链接:来来来看看

请求评论,非常简单,就一句话即可,后续工作系统都给你完成了:

        if ([[UIDevice currentDevice].systemVersion floatValue] > 10.3) {
            if ([SKStoreReviewController respondsToSelector:@selector(requestReview)]) {
                [SKStoreReviewController requestReview];
            }
        }
复制代码

UI具体效果图:

弹出的样式,系统自动生成.png
注意:在测试和TestFlight环境下,是不可以点击提交的评论的。
只有App Store包才可以提交.png

另外这个只是给出一个评价等级,具体评论内容还要用系统给出的Deeplink—— itunes.apple.com/app/idXXXXX…

关注下面的标签,发现更多相似文章
评论