iOS6 SDK: 在應用內展示App Store
出于什么樣的原因你會希望用戶從你的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,在頂部添加下邊這個引入語法:
- #import<StoreKit/StoreKit.h>
下頁為您帶來構建和運行/總結/源文件
#p#
Step 3: Using the SKStoreProductViewController Class(使用SKStoreProductViewController類)
在視圖控制器的viewDidLoad方法中,在下面的代碼片段中創建一個新的按鈕。按鈕的類型是UIButtonTypeRoundedRect,然后我把這個按鈕放在視圖控制器view的正中間。同時我還給這個按鈕制定了一個title,并添加了一個target-action——匹配 UIControlEventTouchUpInside事件。這意味無論何時,用戶點擊按鈕,view controller就會收到 “open App Store”的信息。
- - (void)viewDidLoad {
- [super viewDidLoad];
- // Initialize Button
- UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
- [button setTitle:@"Go to App Store" forState:UIControlStateNormal];
- [button setFrame:CGRectMake(0.0, 0.0, 200.0, 44.0)];
- [button setCenter:self.view.center];
- [self.view addSubview:button];
- // Add Target-Action Pair
- [button addTarget:self action:@selector(openAppStore:) forControlEvents:UIControlEventTouchUpInside];
- }
在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。
- - (void)openAppStore:(id)sender {
- // Initialize Product View Controller
- SKStoreProductViewController *storeProductViewController = [[SKStoreProductViewController alloc] init];
- // Configure View Controller
- [storeProductViewController setDelegate:self];
- [storeProductViewController loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier : @"594467299"}
- completionBlock:^(BOOL result, NSError *error) {
- if (error) {
- NSLog(@"Error %@ with User Info %@.", error, [error userInfo]);
- } else {
- // Present Store Product View Controller
- [self presentViewController:storeProductViewController animated:YES completion:nil];
- }
- }];
- }
注意:你可以在iTunes Connect找到app的唯一識別符,App Store中的每個app都有一個唯一識別符/Apple ID,注意你需要將在參數字典中以字符串的形式傳遞apple id。
在生成和運行程序之前,我們需要MTViewController類通過實現productViewControllerDidFinish:方法以遵循 SKStoreProductViewControllerDelegate協議。我們可以通過告訴編譯器“MTViewController類符合 SKStoreProductViewController授權協議”來更新view controller的接口文件,看下邊:
- #import <UIKit/UIKit.h>
- #import <StoreKit/StoreKit.h>
- @interface MTViewController : UIViewController <SKStoreProductViewControllerDelegate>
- @end
在view controller的執行文件中執行productViewControllerDidFinish:方法(如下所示),注意一點,當調 用 loadProductWithParameters:completionBlock: 方法 時,sotre product view controller將以模態方式顯示。當用戶打算離開App Store時我們負責解除(隱 藏)sotre product view controller。
- - (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController {
- [self dismissViewControllerAnimated:YES completion:nil];
- }
Step 4: Build and Run(構建和運行)
雖然蘋果表示SKStoreProductViewController類可以向用戶展示其他app,但這是一種理想的在用戶不離開當前app的情況下,讓用戶去App Store評分的方法。
Conclusion(結論)
SKStoreProductViewController類添加至Store Kit框架是一個不錯的進步,我已經在我的新應用中充分利用了這個優勢,希望對你會有所幫助。
源文件: