SwiftyStoreKit.verifyReceipt Продолжайте запрашивать Apple ID (при покупке приложения) - PullRequest
0 голосов
/ 18 марта 2020

Я использовал SwiftyStoreKit.verifyReceipt, чтобы убедиться, что пользователь все еще подписан на автоматическое продление членства. Я запускаю этот код на viewWillAppear, он работает хорошо, но проблема в том, что он продолжает каждый раз запрашивать Apple ID и пароль, потому что приложение все еще находится в разработке / покупка приложения не была проверена Apple или я неправильно использую SwiftyStoreKit.verifyReceipt.

Документация: https://github.com/bizz84/SwiftyStoreKit

Мой код в viewWillAppear :

 let appleValidator = AppleReceiptValidator(service: .production, sharedSecret: "123")
                            SwiftyStoreKit.verifyReceipt(using: appleValidator) { result in


                                switch result {
                                case .success(let receipt):
                                    let productId = "123"
                                    // Verify the purchase of a Subscription
                                    let purchaseResult = SwiftyStoreKit.verifySubscription(
                                        ofType: .autoRenewable, // or .nonRenewing (see below)
                                        productId: productId,
                                        inReceipt: receipt)


                                    switch purchaseResult {
                                    case .purchased(let expiryDate, let items):
                                        print("\(productId) is valid until \(expiryDate)\n\(items)\n")
                                        OneSignal.sendTag("isUserVIPMember", value: "true")
                                    case .expired(let expiryDate, let items):
                                        print("\(productId) is expired since \(expiryDate)\n\(items)\n")
                                        OneSignal.sendTag("isUserVIPMember", value: "false")
                                    case .notPurchased:
                                        print("The user has never purchased \(productId)")
                                        OneSignal.sendTag("isUserVIPMember", value: "false")
                                    }

                                case .error(let error):
                                    print("Receipt verification failed: \(error)")


                                }
                            }

1 Ответ

0 голосов
/ 19 марта 2020

Я предполагаю, что verifyReceipt не использует локальную квитанцию, а запрашивает ее в App Store. Для запроса чека требуется согласие пользователя и, следовательно, объясняется, почему он должен ввести свои учетные данные.

Код на Github гласит, что значение по умолчанию forceRefresh равно false, но не могли бы вы добавить forceRefresh: false на verifyReceipt вызов.

Также не могли бы вы проверить, если receiptString содержит какие-либо данные?

let receiptData = SwiftyStoreKit.localReceiptData
let receiptString = receiptData.base64EncodedString(options: [])

И если так, пожалуйста, попробуйте сделать SwiftyStoreKit.verifySubscription() с местная квитанция. Вам все еще нужно вводить свои учетные данные?

Я не знаю, какое приложение вы создаете, но я бы порекомендовал не проверять квитанцию ​​в viewWillAppear. Местная квитанция в любом случае не изменится (за исключением продлений). Так что делайте это один раз при запуске приложения или, если действительно важно, чтобы пользователь потерял доступ, к тому, что он получит с вашей подпиской, я бы порекомендовал использовать пользовательский сервер. Сервер будет уведомлен, если что-то изменится в статусе подписки пользователя.

Примечание: в данный момент я бы рекомендовал не использовать SwiftyStoreKit, потому что они проверяют получение на сервере конечная точка от Apple, и это разрешено только с другого сервера. Скорее всего, Apple отклонит ваше приложение.

Предупреждение

Не вызывайте конечную точку сервера verify Store Receipt из вашего приложения. Вы не можете создать надежное соединение между устройством пользователя и App Store напрямую, потому что вы не контролируете ни один конец этого соединения, что делает его уязвимым для атаки «человек посередине».

Источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...