2011-02-14 16 views
54

我的應用程序正在使用應用程序內購買,並且我的大多數用戶可以正常購買而沒有任何問題。對於這些人,我的應用程序在購買成功後下載內容,他們很高興。SKPaymentQueue addTransactionObserver在應用程序內購買後在啓動時要求提供App Store密碼

但是,對於越來越多的用戶來說,一旦他們完成了成功的應用程序內購買,他們就會在每次應用程序啓動後被要求提供App Store密碼。我相信這是在電話會議上發生的事情:

[[SKPaymentQueue defaultQueue] addTransactionObserver:observer]; 

這我在啓動時在蘋果的應用內購買指南呼籲:按照步驟6:

我的猜測是,出於某種原因,蘋果的應用程序內購買服務器沒有註冊事務完成su - 即使我打電話

[[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 

當交易完成,我的內容已成功下載。

2個問題:

  1. 是任何人都看到了這個?

  2. 有沒有人有建議的修復?

BOUNTY編輯

它這是一個不同的蘋果ID進行的交易。這就是爲什麼它不能完成,除非你在對話框中輸入正確的憑證。該問題應該是:

  1. 我該如何防止這樣的死亡交易(交易未完成,用戶沒有網絡,同時更改App-ID)?
  2. 如何修剪SkPaymentQueue
+0

我也遇到過這種情況。 – 2011-05-03 15:13:07

+0

它必須依賴於已經與另一個AppStore帳戶中斷的一些事務:http://stackoverflow.com/questions/6971740/in-app-purchase-sign-in-to-itunes-store-after-skpaymentqueue-defaultqueue -一個。用戶必須嘗試所有他曾經使用的AppStore帳戶,如果他找到了正確的帳戶,郵件將不會再出現。但這不可能是解決方案。必須確保不會與舊的/舊的AppStore帳戶進行交易。也許這是一個蘋果「Bug」? – 2011-10-19 15:15:05

+0

你在哪裏添加了你的交易觀察員? – 2012-05-23 08:41:38

回答

31

我有同樣的problem.make確保您撥打

[[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 

爲交易的所有三種狀態: SKPaymentTransactionStatePurchased,SKPaymentTransactionStateRestored,SKPaymentTransactionStateFailed。

0

這似乎是一個無法解決的問題:)我將支持蘋果提交的請求......

+0

您是否已就此與Apple聯繫,並且您是否從他們那裏收到了回覆? – SAHM 2012-07-21 20:57:25

3

我懷疑這是一個正確的行爲。當您設置委託SKPaymentQueue時,請嘗試檢查是否有一些交易要完成。可能沒有未完成的交易,但檢查的事實需要在iTunes中登錄。我認爲你無能爲力。

它通常具有某種意義,但對於在每個事務中設置要求密碼(例如某些兒童保護)的用戶而言,這非常煩人。所以唯一的辦法就是在你要申請iTunes時明確地設置委託。例如,你可以添加一些按鈕,如「恢復我的購買」。不是很漂亮,但絕對不那麼討厭。

+0

我實際上對我幫助開發的應用程序做了同樣的事情。可能是最簡單的解決方案。 – 2012-07-12 20:46:52

0

刪除並重新安裝應用程序將刪除與另一個iTunes帳戶關聯的任何舊事務。如果您仍然看到事務發佈到通知隊列中,那麼您的邏輯中可能有一些分支沒有調用finishTransaction。

您需要致電上的finishTransaction全部發送到paymentQueue:updatedTransactions:的事務,即使是使用SKPaymentTransactionStateFailed的事務。

+0

不,它不!不好的建議。不要這樣做。 – 2016-06-11 09:57:49

0

檢查以下,因爲我有我的viewDidLoad方法。我有一個應用程序被拒絕,當蘋果希望我從非消費品到消費品,但我在我的viewDidLoad方法中留下了以下行:(我認爲密碼提示是從測試用戶交換到普通用戶返回到問題測試用戶)

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 

一旦移除了密碼請求停止。

而且我已經離開了:[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 並且該應用程序現在已被批准。

0

你知道,我通過在updatedTransactions中進行修改來解決了這個問題。我沒有在所有情況下添加[[SKPaymentQueue defaultQueue] finishTransaction:transaction];

1

我在測試IAP時遇到同樣的問題。
我使用3個測試帳戶進行測試,該應用程序不斷詢問兩個帳戶的密碼。即使我沒有觸摸任何購買/恢復按鈕或addTransactionObserver。
我認爲這是因爲之前的一些交易沒有正確完成,
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];根本無濟於事。
所以這裏就是我做什麼來解決這個問題:

  1. 輸入每個帳戶的密碼,無論 店多少次的應用程序要求 - 我輸入6次,連續3帳戶 - 直到它從不問 再次。
  2. 轉到設置並註銷蘋果ID。
  3. 正常退出應用程序 - 不要在xcode中終止它。然後殺掉任務列表中的進程。
  4. 從設備上刪除應用程序(只需刪除該應用程序將無法正常工作,它會仍然要求提供密碼)在Xcode再次
  5. 重啓設備
  6. 運行的應用程序/在你的情況下,重新安裝從App Store中的。

的靈感來自Expected sequence when using iTunes test user

3

有一種叫做 「無限循環」 的問題。在汽車可再生能源的早期,這是一個大問題,大約一週之內,服務器不會將續訂限制到5次。獲取事務並且不調用finishTransaction的設備將每週大約獲取一次交付給該設備的事務,直到該特定測試用戶登錄並調用finishTransaction爲止。如果您切換到飛行模式,您可以「清除」這些交易一週 - 但他們會回來。

1

我解決了這個問題刪除了與此問題相關的iTunes Connect測試用戶帳號。應用程序實際上再次要求登錄,但隨後消失(我也刪除了應用程序,重新啓動iPhone並以普通的非沙盒用戶身份登錄,在其他非沙盒應用程序中進行了真正的還原,然後啓動應用程序)

0

這裏是我怎麼能一致地重現並解決此問題:

的iOS 8.4,應用程序的開發版本。

1)使用測試(沙箱)蘋果帳戶。

2)恢復購買的交易。

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions] 

3)立即關閉應用程序。

4)我每次啓動該應用程序就會彈出「登錄」的形式時註銷測試帳號的(通過設置)

5)啓動應用

現在。如果我輸入密碼也沒關係。如果我進行購買或恢復購買,這並不重要。我刪除並重新安裝應用程序並不重要。每次啓動應用程序時,都會顯示iTune登錄。

修復:硬重啓設備。

這是我不知道的。這是否會在生產環境中發佈(已發佈的應用程序和實際的Apple登錄)?我希望不是。

6

我有來了在呼叫的登錄提示同樣的問題:

[[SKPaymentQueue defaultQueue] addTransactionObserver:observer]; 

它還將拿出飄飛,即使我沒有使用我的應用程序(在主屏幕上或在其他應用程序),這真的很煩人。環顧四周,似乎有很多關於這個問題的建議答案,但我終於找到了我所收集的一個解決方案。

注意:在步驟1之前,我已經在iTunes Connect中刪除了測試沙箱帳戶。我不確定這是否會影響解決方案。

爲了解決這個問題,這是我做過什麼:

  1. 從運行Xcode中的應用。
  2. 等待提示出現。輸入所需帳戶的密碼並點擊確定。
  3. 按設備上的主頁按鈕。
  4. 從Xcode殺死應用程序。
  5. 從設備上刪除應用程序。
  6. 從iTunes中退出& App Store在設置應用程序中。
  7. 關閉設備,然後重新打開。
  8. 從App Store購買東西。當它提示您時,請使用生產Apple ID帳戶登錄。 (我假設你應該可以在設置應用程序下的iTunes & App Store中使用生產帳戶登錄,但這是我的做法)。
  9. 返回到Xcode並再次運行您的應用程序。 (這應該是一個新的安裝,因爲您之前刪除了該應用程序。)
  10. 等待登錄提示出現。
  11. 點擊取消。一個對話框顯示「需要登錄,點擊繼續並登錄檢查下載。[環境:沙盒]」應該出現。這是與以前的主要區別。當我要求輸入密碼時按下「取消」按鈕時,我從來沒有出現過這個對話框。
  12. 點擊繼續。
  13. 輸入帳戶的密碼。

就是這樣。從此,每當我運行我的應用程序時,登錄提示就會停止,並且隨時停止提醒。

希望這會有所幫助!

1

如果有人看到這一點,並正在使用GoogleMobileAds.framework那麼你也可能需要調用

[GADMobileAds disableAutomatedInAppPurchaseReporting]; 

-application:didFinishLaunchingWithOptions:

3

請不要在此處刪除了答案。這就是這個特殊的Stackoverflow問題,誤導了我,並讓我困擾了好幾天。

我把這裏放在這裏,因爲有很多非常糟糕的答案,提供錯誤信息如何解決問題。

請勿:

  • 刪除沙盒測試用戶。這使得無法解決問題,您將不得不聯繫Apple開發人員支持人工解決問題。
  • 如果您刪除沙盒測試用戶,當您隨後反覆提示以該用戶身份登錄並完成交易時,您無法進行此操作,因此名稱爲無盡環路問題。您也不能再次添加已刪除的測試用戶;開發者門戶網站說用戶標識已被使用。
  • 刪除應用程序或重新安裝iOS或任何其他這樣的廢話。它沒有效果,不能解決問題並浪費很多時間。

DO:

  • 所有事務呼叫完成。
  • 如果某人由於某種原因而中斷,只需完成後續的應用程序運行即可。該應用程序將被重複發送支付隊列通知,直到你調用它的光潔度:

[SKPaymentQueue defaultQueue] finishTransaction:交易]。

就是這樣,完成所有交易!否則,每當您的應用在該設備上啓動時,您都會被髮送到登錄請求的無盡循環地獄。

相關問題