iOS6 SDK: 在应用内展示App Store

移动开发 iOS
我们将要创建的app不是多实用,仅有一个按钮,可以把用户带入App Store,向用户展示我最近发布的一款简单的天气类app。通过实例我们可以了解不同的部分如何很好地契合在一起,还可以了解如何在项目中使用SKStoreProductViewController类。

出于什么样的原因你会希望用户从你的iOS app中进入App Store呢?可能你想用户去App Store 为你的应用评分,也可能你希望用户看到你其他的iOS app。iOS 6引入了 SKStoreProductViewController类,可以让用户在不离开当前应用的前提下展示App Store中的其他产品。

Store Kit(商店套件)

SKStoreProductViewController类是Store Kit框架的一部分。SKStoreProductViewController使用起来非常简单,在用实例讲解之前,了解一些基本的知识很有必要。

SKStoreProductViewController 类是UIViewController的子类, 如果你对view controller比较熟悉的话,那 SKStoreProductViewController使用起来也非常简单了。当你希望向用户展示App Store中产品时,你需要:

1.实例化一个SKStoreProductViewController类

2.设置它的delegate

3.把sotre product视图控制器显示给消费者

剩下的就交给操作系统来处理了。需要记住一点的是SKStoreProductViewController只能以模态的方式显示。 SKStoreProductViewControllerDelegate协议定义了一个单独的方法— productViewControllerDidFinish:,当消费者离开App Store时会调用这个方法—一般是通过点击左上角画面中的取消 按钮。通过给代理发送productViewControllerDidFinish:消息,操作系统就会把控制权返回到你的程序。下面我来演示一下如何 在一个简单的程序中使用SKStoreProductViewController类。

Step 1: Setting Up the Project(设置项目)

我们将要创建的app不是多实用,仅有一个按钮,可以把用户带入App Store,向用户展示我最近发布的一款简单的天气类app。通过实例我们可以了解不同的部分如何很好地契合在一起,还可以了解如何在项目中使用SKStoreProductViewController类。

从模版列表中选择一个Single View Application模版,在Xcode中创建一个新的项目(图1)。

将程序的名称设置为app store,然后输入一个company identifier,并将device family设置为iPhone,***勾选 上Automatic Reference Counting。剩余的勾选框不要勾选,如图2。“告诉”Xcode你希望保存项目的地方,点击创建按钮。

Step 2: Adding the Store Kit Framework(添加Store Kit框架)

由于SKStoreProductViewController类是Store Kit框架的一部分,所以我们需要将这个Store Kit框架链接到我们的工程中。在工程导航器中选中工程,然后在target列表中选中target。在画面的顶部,选择Build Phase选项,然后打开Link Binary With Libraries。点击‘+’按钮,并在图3中的画面列表中选择StoreKit.framework。这样就可以 成功的将Store Kit框架链接到工程中。

为了使用MTViewController类里的Store Kit框架,我们需要输入框架的头文件,打开MTViewController.h,在顶部添加下边这个引入语法:

  1. #import<StoreKit/StoreKit.h> 

下页为您带来构建和运行/总结/源文件

#p#

Step 3: Using the SKStoreProductViewController Class(使用SKStoreProductViewController类)

在视图控制器的viewDidLoad方法中,在下面的代码片段中创建一个新的按钮。按钮的类型是UIButtonTypeRoundedRect,然后我把这个按钮放在视图控制器view的正中间。同时我还给这个按钮制定了一个title,并添加了一个target-action——匹配 UIControlEventTouchUpInside事件。这意味无论何时,用户点击按钮,view controller就会收到 “open App Store”的信息。

  1. - (void)viewDidLoad {      
  2.     [super viewDidLoad];      
  3.      // Initialize Button      
  4.      UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];      
  5.      [button setTitle:@"Go to App Store" forState:UIControlStateNormal];      
  6.      [button setFrame:CGRectMake(0.0, 0.0, 200.0, 44.0)];      
  7.      [button setCenter:self.view.center];     
  8.      [self.view addSubview:button];      
  9.      // Add Target-Action Pair      
  10.      [button addTarget:self action:@selector(openAppStore:) forControlEvents:UIControlEventTouchUpInside]; 
  11.  } 

在openAppStore: 方法中,我对SKStoreProductViewController进行了初始化,并将自己设置为它的 delegate,然后在给这个实例发送一个loadProductWithParameters:completionBlock:消息。

loadProductWithParameters:completionBlock:接收两个参数:

(1)一个字典:用一个key指定我们想要显示给用的程序的标示符。

(2)一个completion block。

当App store请求结束时会调用这个completion block。在完成的block中,我们要核实是否有错误遗漏,并把store product 视图控制器展示给用户。

请记住,即使用户没有离开你的程序,操作系统仍然会在内部进行与App store的连接。由于在请求App Store过程中,会需要稍微长的一段时间, 也就是说,***在请求还没有返回响应时给用户显示一个风火轮。一旦请求完成(成功或者不成功),已经完成的block将会允许我们解除 activity indicator。

  1.  - (void)openAppStore:(id)sender {      
  2.      // Initialize Product View Controller      
  3.      SKStoreProductViewController *storeProductViewController = [[SKStoreProductViewController alloc] init];      
  4.      // Configure View Controller      
  5.      [storeProductViewController setDelegate:self];     
  6.      [storeProductViewController loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier : @"594467299"
  7. completionBlock:^(BOOL result, NSError *error) {          
  8.          if (error) {              
  9.               NSLog(@"Error %@ with User Info %@.", error, [error userInfo]);          
  10.          } else {              
  11.              // Present Store Product View Controller              
  12.              [self presentViewController:storeProductViewController animated:YES completion:nil];         
  13.          }      
  14.       }];  
  15.   } 

注意:你可以在iTunes Connect找到app的唯一识别符,App Store中的每个app都有一个唯一识别符/Apple ID,注意你需要将在参数字典中以字符串的形式传递apple id。

在生成和运行程序之前,我们需要MTViewController类通过实现productViewControllerDidFinish:方法以遵循 SKStoreProductViewControllerDelegate协议。我们可以通过告诉编译器“MTViewController类符合 SKStoreProductViewController授权协议”来更新view controller的接口文件,看下边:

  1. #import <UIKit/UIKit.h>  
  2. #import <StoreKit/StoreKit.h>  
  3. @interface MTViewController : UIViewController <SKStoreProductViewControllerDelegate>  
  4. @end 

在view controller的执行文件中执行productViewControllerDidFinish:方法(如下所示),注意一点,当调 用 loadProductWithParameters:completionBlock: 方法 时,sotre product view controller将以模态方式显示。当用户打算离开App Store时我们负责解除(隐 藏)sotre product view controller。

  1. - (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController {      
  2.      [self dismissViewControllerAnimated:YES completion:nil];  
  3.  } 

Step 4: Build and Run(构建和运行)

虽然苹果表示SKStoreProductViewController类可以向用户展示其他app,但这是一种理想的在用户不离开当前app的情况下,让用户去App Store评分的方法。

Conclusion(结论)

SKStoreProductViewController类添加至Store Kit框架是一个不错的进步,我已经在我的新应用中充分利用了这个优势,希望对你会有所帮助。

源文件:

http://down.51cto.com/data/812812

责任编辑:闫佳明 来源: cocoachina
相关推荐

2012-10-24 15:08:11

设备不被追踪长尾

2013-05-17 10:19:17

2011-02-18 14:49:28

App Store苹果iOS

2013-08-01 10:22:28

Google Play应用商店App Store

2014-07-16 09:56:52

2012-08-22 13:00:08

2010-10-25 10:58:50

后街篮球应用

2021-09-14 09:21:50

苹果应用商店App Store

2022-07-20 16:04:15

iOS苹果App Store

2014-10-15 09:35:31

2012-04-05 11:14:14

iPad

2011-03-11 14:14:51

Android MarApp S

2014-07-14 11:14:00

iOSSafariWebApp

2018-06-26 10:25:53

iOS应用系统

2011-04-19 09:28:25

App Store苹果应用商店

2011-07-21 16:21:04

App Store苹果

2012-03-23 22:31:10

移动支付

2020-02-22 13:00:26

App StoreiOSOffice

2021-09-30 09:52:21

App StoreiOS苹果

2012-07-24 10:21:41

点赞
收藏

51CTO技术栈公众号