我有一個恢復按鈕。問題是如果他們沒有進行恢復,並且他們試圖購買一件物品,並且他們已經購買了該物品,我需要告訴他們他們已經購買了它並且不進行購買。所以我需要一種方式來知道,不做恢復,他們已經購買了哪些物品。我試着先做一次恢復,每當用戶試圖購買,但蘋果拒絕我的應用程序。他們表示,在顯示確認應用內購買對話框之前,不會發生還原。蘋果拒絕我的應用程序,由於恢復IAP
請幫我找到正確的方法。
在此先感謝。
我有一個恢復按鈕。問題是如果他們沒有進行恢復,並且他們試圖購買一件物品,並且他們已經購買了該物品,我需要告訴他們他們已經購買了它並且不進行購買。所以我需要一種方式來知道,不做恢復,他們已經購買了哪些物品。我試着先做一次恢復,每當用戶試圖購買,但蘋果拒絕我的應用程序。他們表示,在顯示確認應用內購買對話框之前,不會發生還原。蘋果拒絕我的應用程序,由於恢復IAP
請幫我找到正確的方法。
在此先感謝。
您可以將這些數據保存在NSUserDefaults。並且您不需要顯示警報說這些項目已經購買。如果其非消費品蘋果正在顯示提醒說他們已經購買了該商品!
編輯:
1)需要3個按鈕添加到您的視圖
您需要如果您支持應用內購買,請爲用戶提供還原選項你的應用。否則,Apple會拒絕你的應用程序。
2)如果用戶按購買按鈕,不要檢查用戶是否已經購買了您的應用程序。由於Apple不會爲相同的非消耗性產品向用戶收取兩次費用。因此,只要通過你的購買代碼,如果用戶已經購買但蘋果的StoreKit框架將與
調用它的委託方法
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
SKPaymentTransactionStatePurchased
交易狀態。所以你可以給他登錄屏幕。
3)如果用戶按下恢復按鈕只是去通過與您的還原碼
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
,並像在第2步,它會調用與同一交易狀態的委託方法。所以你可以將登錄頁面呈現給用戶。
4)如果用戶按下演示版本按鈕,給他演示版本。
5)如果用戶購買了你的應用程序,刪除它,如果他重新安裝它,請把他當作新用戶。向他展示這3個按鈕,用戶可以恢復購買,然後您可以向他展示登錄頁面。
6)如果您確實需要跟蹤應用程序是否在確切的設備上購買,那麼您可以使用鑰匙串存儲您的數據,因爲即使應用程序已卸載或刪除,鑰匙串項目也不會被刪除。這個API將有很大的幫助link,看看
或
你可以參考蘋果的documentation在鑰匙扣數據
這將無法可靠地工作:用戶可能已經購買了另一個設備上的應用程序(或通過iTunes);用戶可能已手動刪除應用程序或擦除設備... – 2013-05-06 13:06:45
如果用戶使用相同的Apple ID,則Apple不會再向用戶收費,您將獲得稱爲說明應用程序已購買的委託方法。所以你可以解鎖你的應用程序的隱藏功能 – Ushan87 2013-05-06 13:09:22
確切地說。這意味着使用'NSUserDefaults'不能解決OP的問題。 – 2013-05-06 13:10:47
據我所知,沒有其他方法可以做到這一點。
您應該提供還原按鈕以恢復應用程序內購買,否則Apple將拒絕您的應用程序。
如果不顯示應用內購買確認提醒,您將無法連接到應用內服務器或還原分流。
:是的你是對的,我已經有一個恢復按鈕,但在進入該屏幕之前,我需要檢查產品是否購買天氣。 – MadhuP 2013-05-06 13:09:28
@ pm444:那是不可能的。當用戶再次點擊購買時,它會給出如下響應:'SKPaymentTransactionStateRestored'。 – 2013-05-06 13:16:38
我有兩個應用程序商店,支持應用程序內購買。我有一個單獨的恢復按鈕,並分別顯示產品列表。如果用戶購買一件物品,我將這些數據保存在我的NSUserDefaults中,當用戶進入應用內購買頁面時,我不會向他顯示他已購買的產品。就那麼簡單!! – Ushan87 2013-05-06 13:29:11
據蘋果「還原應用程序內購買對話框無法確認之前發生顯示「。使用- (空)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)隊列 功能,檢查代碼
- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error {
NSLog(@"%@",error);
}
// Call This Function
- (void) checkPurchasedItems
{
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}
//Then this delegate Function Will be fired
- (void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
purchasedItemIDs = [[NSMutableArray alloc] init];
NSLog(@"received restored transactions: %i", queue.transactions.count);
for (SKPaymentTransaction *transaction in queue.transactions)
{
NSString *productID = transaction.payment.productIdentifier;
[purchasedItemIDs addObject:productID];
NSLog(@"%@",purchasedItemIDs);
}
}
:謝謝你給我答覆。這也只不過是在調用inAppPurchase之前調用Restore方法知道 ! – MadhuP 2013-05-06 13:05:46
是NSUserDefaults的你最好的選擇。但只要您負責獲取信息,任何形式的存儲都將起作用。看起來像一個設計缺陷,你不覺得嗎?我知道他們希望保證用戶數據安全,但是jeez。 – achi 2013-12-13 20:05:20
如果用戶再次嘗試購買非消耗品,則不會再次收取費用。相反,他們會收到一條消息,說他們已經付款並可以免費獲得。 – 2014-01-14 11:35:23