iOS 在應用內展示App Store 【StoreKit,SKStoreProductViewController】,iosstorekit

來源:互聯網
上載者:User

iOS 在應用內展示App Store 【StoreKit,SKStoreProductViewController】,iosstorekit

出於什麼樣的原因你會希望使用者從你的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中建立一個新的項目。

將程式的名稱設定為UsingStoreProduct,然後輸入一個company identifier,並將device family設定為iPhone,最後勾選上Automatic Reference Counting。剩餘的勾選框不要勾選。“告訴”Xcode你希望儲存項目的地方,點擊建立按鈕。

Step 2: Adding the Store Kit Framework 

由於SKStoreProductViewController類是Store Kit架構的一部分,所以我們需要將這個Store Kit架構連結到我們的工程中。在工程導航器中選中工程,然後在target列表中選中target。在畫面的頂部,選擇Build Phase選項,然後開啟Link Binary With Libraries。點擊‘+’按鈕,並在列表中搜尋StoreKit並選擇StoreKit.framework。這樣就可以成功的將Store Kit架構連結到工程中。

為了使用UsingStoreProductViewController類裡的Store Kit架構,我們需要輸入架構的標頭檔,開啟UsingStoreProductViewController.h,在頂部添加下邊這個引入文法:

#import <StoreKit/StoreKit.h>
Step 3: Using the SKStoreProductViewController Class

在視圖控制器的viewDidLoad方法中,在下面的程式碼片段中建立一個新的按鈕。按鈕的類型是UIButtonTypeRoundedRect,然後 我把這個按鈕放在視圖控制器view的正中間。同時我還給這個按鈕制定了一個title,並添加了一個target-action——匹配 UIControlEventTouchUpInside事件。這意味無論何時,使用者點擊按鈕,view controller就會收到“前往尋藝 App Store”的資訊。

- (void)viewDidLoad{    [super viewDidLoad];            [super viewDidLoad];    //初始化一個按鈕    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];    [button setTitle:@"前往尋藝 App Store" forState:UIControlStateNormal];    [button setFrame:CGRectMake(0.0, 0.0, 200.0, 44.0)];    [button setCenter:self.view.center];    [self.view addSubview:button];    [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{    //初始化Product View Controller    SKStoreProductViewController *storeProductViewController = [[SKStoreProductViewController alloc] init];    //配置View Controller    [storeProductViewController setDelegate:self];    [storeProductViewController loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier:@"685836302"}                                          completionBlock:^(BOOL result, NSError *error){                                              if(error)                                              {                                                  NSLog(@"Error %@ with User Info %@.", error, [error userInfo]);                                              }                                              else                                              {                                                  [self presentViewController:storeProductViewController                                                                     animated:YES                                                                   completion:nil];                                              }                                          }];    }

注意:你可以在iTunes Connect找到app的唯一識別符,App Store中的每個app都有一個唯一識別符/Apple ID,注意你需要將在參數字典中以字串的形式傳遞apple id。

在產生和運行程式之前,我們需要MTViewController類通過實現productViewControllerDidFinish:方法以遵循 SKStoreProductViewControllerDelegate協議。我們可以通過告訴編譯器“UsingStoreProductController類符合 SKStoreProductViewController授權協議”來更新view controller的介面檔案,看下邊:

#import <UIKit/UIKit.h>#import <StoreKit/StoreKit.h>@interface UsingStoreProductViewController : UIViewController<SKStoreProductViewControllerDelegate>@end
Step 4: Build and Run

雖然蘋果表示SKStoreProductViewController類可以向使用者展示其他app,但這是一種理想的在使用者不離開當前app的情況下,讓使用者去App Store評分的方法。

整個的運行邏輯代碼:

UsingStoreProductViewController.m

////  UsingStoreProductViewController.m//  UsingStoreProduct////  Created by david on 13-9-23.//  Copyright (c) 2013年 WalkerFree. All rights reserved.//#import "UsingStoreProductViewController.h"@interface UsingStoreProductViewController ()@end@implementation UsingStoreProductViewController@synthesize indicatorView;- (void)viewDidLoad{    [super viewDidLoad];            [super viewDidLoad];    //初始化一個按鈕    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];    [button setTitle:@"前往尋藝 App Store" forState:UIControlStateNormal];    [button setFrame:CGRectMake(0.0, 0.0, 200.0, 44.0)];    [button setCenter:self.view.center];    [self.view addSubview:button];    [button addTarget:self               action:@selector(openAppStore:)     forControlEvents:UIControlEventTouchUpInside];    }-(void) openAppStore:(id)sender{    [self showIndicator];    //初始化Product View Controller    SKStoreProductViewController *storeProductViewController = [[SKStoreProductViewController alloc] init];    //配置View Controller    [storeProductViewController setDelegate:self];    [storeProductViewController loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier:@"685836302"}                                          completionBlock:^(BOOL result, NSError *error){                                              if(error)                                              {                                                  NSLog(@"Error %@ with User Info %@.", error, [error userInfo]);                                              }                                              else                                              {                                                  [self hideIndicator];                                                  [self presentViewController:storeProductViewController                                                                     animated:YES                                                                   completion:nil];                                              }                                          }];    }-(void) productViewControllerDidFinish:(SKStoreProductViewController *)viewController{    [self dismissViewControllerAnimated:YES completion:nil];}- (void)showIndicator{    indicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];    indicatorView.autoresizingMask =    UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin    | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;    [self.view addSubview:indicatorView];    [indicatorView sizeToFit];    [indicatorView startAnimating];    indicatorView.center = self.view.center;}- (void)hideIndicator{    [indicatorView stopAnimating];}- (void)didReceiveMemoryWarning{    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.