1

我想實現自動再生訂閱,但自己是不是真的對我清楚。跟蹤自動再生訂閱的magazins

如果我有像例如應用一本雜誌,要跟蹤的訂閱,即使他們現在是無效的,我必須保存收據在我的應用程序(如核心數據)?我必須跟蹤他們,因爲即使訂閱無效,我也必須讓用戶訪問舊版問題。因此,無論它有狀態碼0奧德21006.

的另一個問題是,爲什麼蘋果公司將使用該由蘋果,因爲例如某人取消誤發的訂閱取消訂閱的21006個狀態代碼。我怎麼能確定是否發生這種情況,當我只知道它現在是無效的?它也可能因爲超出訂閱期而失效。我從WWDC 2011本資料視頻上的iTunes U.

任何幫助,將不勝感激;-)

回答

0

Apple建議您存儲和驗證所有收據您的服務器上,不一定上的應用程序。要檢查某人訂閱的狀態,只需驗證您爲該用戶存儲的任何收據。 (它必須是來自同一個訂閱系列的收據)然後Apple會迴應該訂閱中的最新收據。您可以使用此信息向用戶提供該雜誌的所有問題,直至該收據的有效期限。如果你願意,你可以在應用程序上完成這一切,但蘋果不鼓勵它,因爲你必須在應用程序本身存儲你的iTunes驗證secret

關於你的第二個問題,我的假設是,蘋果認爲退款作爲外的範數。所以他們不想爲此做出任何讓步。他們不想讓它更容易或自動化。這就是爲什麼你沒有得到一個特殊的代碼,這意味着'用戶的訂閱因退款而被取消'。我希望這是非常罕見的,只需提供免費退款用戶的雜誌文章,不會讓你破產。 (並且由於您的收據驗證將顯示他們的帳戶不會續訂,因此您不必給他們新的問題)。

0

Apple建議您存儲和驗證服務器上的所有收據。

(OR)

RMStore代表交易的持久性和提供了用於存儲在鑰匙串或在交易NSUserDefaults的兩個可選的參考實施方式。您可以實現您的交易,使用庫提供的參考實現,或者在非消耗品和自動更新訂閱的情況下,直接從收據中獲取交易。

-(void) startProductPurchase{ 

[[RMStore defaultStore] requestProducts:[NSSet setWithArray:_products] success:^(NSArray *products, NSArray *invalidProductIdentifiers) { 

    _productsRequestFinished = YES; 
    NSLog(@"Product Request Finished"); 
    [self buyApplication:products]; 
    } failure:^(NSError *error) { 

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Products Request Failed", @"") 
                 message:error.localizedDescription 
                 delegate:nil 
               cancelButtonTitle:NSLocalizedString(@"OK", @"") 
               otherButtonTitles:nil]; 
    [alertView show]; 
    }]; 

刷新收據通知(iOS的7+只)

- (void)storeRefreshReceiptFailed:(NSNotification*)notification; 
{ 
NSError *error = notification.rm_storeError; 
} 

- (void)storeRefreshReceiptFinished:(NSNotification*)notification { } 

收據驗證

RMStore默認不執行接收的驗證,但提供的參考實現。您可以實施自己的自定義驗證或使用庫提供的參考驗證器。

兩個選項概述如下。欲瞭解更多信息,請查看wiki。

參考verificators

RMStore經由RMStoreAppReceiptVerificator提供收據驗證(針對iOS 7或更高)andRMStoreTransactionReceiptVerificator(iOS設備6或更低)。要使用它們中的任何一個,請將RMStore/Optional中相應的文件添加到項目中,並在啓動時設置驗證程序委託(receiptVerificator)。例如:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    const BOOL iOS7OrHigher = floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1; 
_receiptVerificator = iOS7OrHigher ? [[RMStoreAppReceiptVerificator alloc] init] : [[RMStoreTransactionReceiptVerificator alloc] init]; 
[RMStore defaultStore].receiptVerificator = _receiptVerificator; 
// Your code 
return YES; 
} 

欲瞭解更多詳情,請點擊以下鏈接。

iOS In-App purchases made easy

A lightweight iOS library for In-App Purchases

歡迎。

希望它能幫到你.............