IT story

SKPaymentQueue addTransactionObserver가 인앱 구매 후 시작시 App Store 비밀번호를 요청

hot-time 2020. 12. 31. 22:56
반응형

SKPaymentQueue addTransactionObserver가 인앱 구매 후 시작시 App Store 비밀번호를 요청


내 앱은 인앱 구매를 사용하고 있으며 대부분의 사용자는 문제없이 잘 구매할 수 있습니다. 이 사람들을 위해 내 앱은 구매가 성공한 후 콘텐츠를 다운로드하고 행복합니다.

그러나 점점 더 많은 사용자가 인앱 구매를 성공적으로 완료하면 이후에 앱이 시작될 때마다 App Store 암호를 묻는 메시지가 표시됩니다. 나는 이것이 다음과 같은 전화에서 일어나고 있다고 믿습니다.

[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];

Apple의 인앱 구매 가이드의 6 단계에 따라 시작할 때 호출합니다.

내 생각 엔, 어떤 이유로 애플의 인앱 구매 서버가 트랜잭션이 성공적으로 완료되었음을 등록하지 않고 있습니다.

[[SKPaymentQueue defaultQueue] finishTransaction:transaction];

거래가 완료되고 내 콘텐츠가 성공적으로 다운로드되었을 때.

2 가지 질문 :

  1. 다른 사람이 이것을보고 있습니까?

  2. 누구든지 제안 된 수정 사항이 있습니까?

바운티 편집 :

다른 Apple-ID로 이루어진 거래입니다. 따라서 대화 상자에 올바른 자격 증명을 입력하지 않으면 완료 할 수 없습니다. 질문은 다음 중 하나 여야합니다.

  1. 이러한 죽은 트랜잭션을 어떻게 방지 할 수 있습니까 (트랜잭션이 완료되지 않았고 사용자가 네트워크가없는 반면 App-ID가 변경됨)?
  2. 당신은 어떻게 가지 치기를 할 수 SkPaymentQueue있습니까?

나는 같은 문제가 있었다.

[[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 

트랜잭션의 세 가지 상태 모두 : SKPaymentTransactionStatePurchased, SKPaymentTransactionStateRestored, SKPaymentTransactionStateFailed.


전화 할 때 로그인 프롬프트가 나타나는 것과 같은 문제가있었습니다.

[[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. 계정의 비밀번호를 입력하십시오.

그게 다야. 그때부터 로그인 프롬프트가 내 앱을 실행할 때마다 표시되는 것을 멈추고 임의의 시간에 표시되는 것을 멈췄습니다.

도움이 되었기를 바랍니다!


나는 이것이 올바른 행동이라고 생각합니다. 위임 SKPaymentQueue를 설정할 때 완료 할 트랜잭션이 있는지 확인하십시오. 완료되지 않은 거래가 없을 수 있지만 확인 사실은 iTunes에 로그인해야합니다. 그리고 나는 당신이 그것으로 아무것도 할 수 없다고 생각합니다.

일반적으로 어느 정도 의미가 있지만 각 트랜잭션마다 암호를 요청하는 사용자 (예 : 일부 아동 보호)를 설정 한 사용자에게는 매우 성가신 일입니다. 따라서 문제를 해결하는 유일한 방법은 iTunes를 요청할 때 명시 적으로 위임을 설정하는 것입니다. 예를 들어 "내 구매 복원"과 같은 일부 버튼을 추가 할 수 있습니다. 별로 아름답지는 않지만 확실히 덜 짜증납니다.


"무한 루프"라는 문제가 있습니다. 약 1 주일 동안 서버가 갱신을 5로 제한하지 않았던 자동 재생 에너지의 초기에는 큰 문제였습니다. 트랜잭션을 받고 finishTransaction을 호출하지 않는 장치는 해당 트랜잭션을 장치에 한 번 정도 전달합니다. 특정 테스트 사용자가 로그인하고 finishTransaction을 호출 할 때까지 일주일. 비행기 모드로 전환하면 다음 주 동안 해당 거래를 '지울'수 있지만 다시 돌아옵니다.


여기에서 답을 삭제하지 마십시오. 나를 오도하고 며칠 동안 나를 엉망으로 만든 것은이 특정 Stackoverflow 질문이었습니다.

문제를 해결하는 방법에 대한 잘못된 정보를 제공하는 정말 나쁜 답변이 많기 때문에 여기에 넣습니다.

하지 마라:

  • 샌드 박스 테스트 사용자를 삭제하십시오. 이로 인해 문제를 해결할 수 없으며 수동으로 해결하려면 Apple 개발자 지원에 문의해야합니다.
  • 샌드 박스 테스트 사용자를 삭제하면 해당 사용자로 로그인하고 트랜잭션을 완료하라는 메시지가 계속해서 반복적으로 표시되면 할 수 없으므로 이름이 Endless Loop 문제입니다. 삭제 된 테스트 사용자를 다시 추가 할 수도 없습니다. 개발자 포털에 사용자 ID가 이미 사용되었다고 표시됩니다.
  • 앱을 삭제하거나 iOS 또는 다른 말도 안되는 것을 다시 설치하십시오. 효과가없고 문제를 해결하지 못하며 많은 시간을 낭비합니다.

하다:

  • 모든 트랜잭션에 대해 Finish를 호출합니다.
  • 어떤 이유로 중단 된 경우 앱의 후속 실행에서 간단히 완료하십시오. 앱은 전화를 걸 때까지 결제 대기열 알림을 반복적으로 전송합니다.

[[SKPaymentQueue defaultQueue] finishTransaction:transaction];

That's it, Finish all transactions! Else you will be sent to the hell of the Endless Loop of sign in requests every single time your App launches on that device.


I have the same problem when testing IAP.
I tested with 3 test account , the app is keep ask for password for both account. even if I didn't touch any purchase/restore button or addTransactionObserver.
I think this is because some previous transaction has not finished correctly,
but [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; can't help at all.
so here's what I do to solve this problem:

  1. input the password for each account no matter how many times app store ask for--I input 6 times for 3 account--untill it never ask again.
  2. go to the setting and signout the apple ID.
  3. quit the app normally--don't terminate it in xcode. then kill the process in task list.
  4. remove the app from device (simply remove the app won't work it'll still ask for password )
  5. reboot the device
  6. Run the app again from XCode/in your case reinstall the app from app store.

inspired by Expected sequence when using iTunes test user


I resolved it by deleting the iTunes Connect test user account related with this issue. App actually asked once again to sign in, but then it disappeared (I've also deleted app, restarted iPhone and logged in as a normal non-sandbox user, made a real restore in other non-sandbox app and then launched the app)


If anyone is seeing this and is using GoogleMobileAds.framework then you may also need to call

[GADMobileAds disableAutomatedInAppPurchaseReporting];

in -application:didFinishLaunchingWithOptions:


It seems to be an unsolvable Problem :) I will submit a request at Apple support...


Deleting and re-installing the app will remove any old transactions associated with another itunes account. If you are still seeing transactions posted to the notification queue, then you likely had some branch in your logic that did not call finishTransaction.

You need to to call finishTransaction on all transactions that are posted to paymentQueue:updatedTransactions:, even ones with SKPaymentTransactionStateFailed.


bugs related to in app purchases fixed in the iOS update 5.1.1 http://support.apple.com/kb/DL1521


Check for the following as I had it in my viewDidLoad method. I had an app rejected when apple wanted me to go from non-consumable to consumable, however I left the following line in my viewDidLoad method: (I thought the password prompt was a issue with swapping from the test user to normal user back to the test user)

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

Once removed the request for password stopped.

And I have left: [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; in and the app has now been approved just fine.


You know, I resolved this problem by making a modify in my updatedTransactions. I didn't add the [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; for all situations.


Here's how I can consistently reproduce and resolve this issue:

iOS 8.4, development build of the app.

1) Use a test(sandbox) Apple Account.

2) Restore purchased transactions.

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]

3) Immediately close the app.

4) Log out of test account (through settings)

5) Launch app

Now every time I launch the app it will pop up the "login" form. It doesn't matter if I enter the password or not. It doesn't matter if I make purchases or restore the purchases. It doesn't matter if I delete and re-install the app. Every time I launch the app, the iTune login is presented.

Fix: Hard reboot the device.

Here's what I don't know. Will this happen in a production environment (published app and actual apple login)? I hope not.

ReferenceURL : https://stackoverflow.com/questions/4988663/skpaymentqueue-addtransactionobserver-asking-for-app-store-password-on-startup-a

반응형