PKAddPassButton перемещается в верхнюю часть экрана при вызове метода отклонения PKAddPaymentPassViewControllerDelegate.IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 PKAddPassButton перемещается в верхнюю часть экрана при вызове метода отклонения PKAddPaymentPassViewControllerDelegate.

Сообщение Anonymous »


У меня проблема. UiKitView перемещается в верхнюю часть экрана, когда я вызываю метод отклонения класса PKAddPaymentPassViewControllerDelegate. Вы столкнулись с этой проблемой? Когда пользователь нажимает кнопку отмены приложения Apple Wallet, приложение Wallet закрывается, а кнопка перемещается в верхнюю часть экрана. Я хочу, чтобы PKAddPassButton оставался на том же месте экрана после закрытия приложения Apple Wallet

Мы используем UIKitView для отображения PKAddPassButton во флаттере следующим образом:

UiKitView( тип просмотра: тип просмотра, LayoutDirection: TextDirection.ltr, СозданиеПараметры: createParameters(state.panRefId), СозданиеПарамсКодек: константный СтандартныйКодекСообщения(), > ), Мы создали UIViewController в Swift, чтобы показать его следующим образом:
импортировать UIKit импортировать PassKit класс WalletButtonController: UIViewController { пусть cardInfo: AppleWalletBankCardInfo общественный инициализации (cardInfo: AppleWalletBankCardInfo) { self.cardInfo = информация о карте super.init(nibName: ноль, пакет: ноль) } требуется public init (кодер aDecoder: NSCoder) { FatalError("init(coder:) не реализован") } переопределить функцию viewDidLoad() { супер.viewDidLoad() настройкаApplePayButton() } частная функция setupApplePayButton() { let passKitButton = PKAddPassButton(addPassButtonStyle: .blackOutline) passKitButton.frame = CGRect(x: 100, y: 100, ширина: 200, высота: 50) passKitButton.addTarget(self, действие: #selector(onEnroll), для: .touchUpInside) view.addSubview(passKitButton) passKitButton.translatesAutoresizingMaskIntoConstraints = false passKitButton.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, константа: 16).isActive = true passKitButton.leadingAnchor.constraint(equalTo: view.leadingAnchor, константа: 16).isActive = true passKitButton.trailingAnchor.constraint(equalTo: view.trailingAnchor, константа: -16).isActive = true } @objc Private func onEnroll (кнопка: UIButton) { охранник isPassKitAvailable() еще { showPassKitUnavailable (сообщение: «Регистрация InApp недоступна для этого устройства») возвращаться } initEnrollProcess() } функция initEnrollProcess() { Guard let Configuration = PKAddPaymentPassRequestConfiguration(encryptionScheme: .ECC_V2) else { showPassKitUnavailable (сообщение: «Ошибка конфигурации регистрации InApp») возвращаться } Configuration.cardholderName = cardInfo.bankCardHolder Configuration.primaryAccountSuffix = cardInfo.bankCardNumber Configuration.localizedDescription = cardInfo.bankCardName Configuration.primaryAccountIdentifier = cardInfo.bankCardPanRefId Guard let enrollViewController = PKAddPaymentPassViewController (requestConfiguration: конфигурация, делегат: self) else { showPassKitUnavailable (сообщение: «Ошибка конфигурации контроллера регистрации InApp») возвращаться } enrollViewController.modalPresentationStyle = UIModalPresentationStyle.pageSheet; присутствует (enrollViewController, анимированный: true, завершение: ноль) } частная функция isPassKitAvailable() -> Bool { вернуть PKAddPaymentPassViewController.canAddPaymentPass() } частная функция showPassKitUnavailable (сообщение: String) { let alert = UIAlertController(title: «Ошибка InApp», сообщение: сообщение, предпочтительный стиль: .alert) let action = UIAlertAction (заголовок: «ОК», стиль: .default, обработчик: ноль) alert.addAction(действие) присутствует (предупреждение, анимация: правда, завершение: ноль) } } расширение WalletButtonController: PKAddPaymentPassViewControllerDelegate { функция addPaymentPassViewController( _ контроллер: PKAddPaymentPassViewController, сертификатыgenerRequestWithCertificateChain: [Данные], nonce: Данные, nonceSignature: Данные, Обработчик завершенияHandler: @escaping (PKAddPaymentPassRequest) -> Пустота) { пусть certArray = certificates.map { $0.base64EncodedString() } let request = IssuerRequest (сертификаты: certArray, nonce: nonce.base64EncodedString(), nonceSignature: nonceSignature.base64EncodedString(), BankCardId: cardInfo.bankCardId, accessToken: cardInfo.accessToken, encryptUrl: cardInfo.encryptUrl) пусть интерактор = GetPassKitDataIssuerHostInteractor() Interactor.execute(request: request) {ответ в пусть запрос = PKAddPaymentPassRequest() request.activationData = Data (base64Encoded: response.activationData, параметры: .ignoreUnknownCharacters) request.ephemeralPublicKey = Данные (base64Encoded: response.ephemeralPublicKey, параметры: .ignoreUnknownCharacters) request.encryptedPassData = Data(base64Encoded: response.encryptedPassData, параметры: .ignoreUnknownCharacters) обработчик (запрос) } } функция addPaymentPassViewController( _ контроллер: PKAddPaymentPassViewController, DidFinishAdding Pass: PKPaymentPass?, ошибка: Ошибка?) { если пусть _ = передать { print("Банковская карта успешно добавлена ​​в кошелек") } еще {} self.dismiss (анимированный: правда) } } частный класс GetPassKitDataIssuerHostInteractor { func выполнить (запрос: IssuerRequest, onComplete: @escaping (IssuerResponse) -> ()) { выполнитьInternal (issuerRequest: запрос, завершение: { (ответ) в пусть responseData = попробуйте response.get() пусть ответ = IssuerResponse (ActivationData: responseData.activationData, ephemeralPublicKey: responseData.ephemeralPublicKey, зашифрованныеPassData: responseData.encryptedPassData) onComplete (ответ) }) } func выполненияInternal(issuerRequest: IssuerRequest, завершение: @escaping(Result) throws -> Пустота) { var запрос = URLRequest(url: URL(строка:issuerRequest.encryptUrl)!) request.httpMethod = "POST" request.setValue("*/*", forHTTPHeaderField: "Принять") request.setValue("application/json", forHTTPHeaderField: "Content-Type") request.setValue("Носитель \(issuerRequest.accessToken)", forHTTPHeaderField: "Авторизация") пусть тело:[Строка:Любой]=[ "bankCardId": "\(issuerRequest.bankCardId)", "nonce": "\(issuerRequest.nonce)", "nonceSignature": "\(issuerRequest.nonceSignature)", «сертификаты»: IssuerRequest.certificates ] request.httpBody = попробовать? JSONSerialization.data(withJSONObject: тело, параметры: []) URLSession.shared.dataTask(with: request) { (данные, ответ, e) в если let httpResponse = ответ как? HTTPURLResponse{ если httpResponse.statusCode >= 400 { печать (httpResponse.statusCode) распечатать (ответ) возвращаться } } Guard let data = data, e == nil else { распечатать (e!.localizedDescription) возвращаться } делать { let ответ = попробуйте JSONDecoder().decode(IssuerResponse.self, from: data) попробуйте завершение(.успех(ответ)) } ловить { печать (error.localizedDescription) возвращаться } }.резюме() } } структура IssuerRequest { пусть сертификаты: [Строка] пусть nonce: строка пусть nonceSignature: String пусть bankCardId: строка пусть accessToken: строка пусть encryptUrl: строка } struct IssuerResponse : Декодируемый { пусть активацияData: String пусть ephemeralPublicKey: String пусть зашифрованныйPassData: строка } структура AppleWalletBankCardInfo { пусть bankCardHolder: String пусть bankCardPanRefId: String пусть BankCardName: String пусть BankCardNumber: String пусть bankCardId: строка пусть BankCardType: Int пусть accessToken: строка пусть encryptUrl: строка init(bankCardHolder: String, BankCardPanRefId: String, BankCardName: String, BankCardNumber: String, BankCardId: String, BankCardType: Int, accessToken: String, encryptUrl: String) { self.bankCardHolder = BankCardHolder self.bankCardPanRefId = BankCardPanRefId self.bankCardName = имя банковской карты self.bankCardNumber = номер банковской карты self.bankCardId = идентификатор банковской карты self.bankCardType = BankCardType self.accessToken = токен доступа self.encryptUrl = encryptUrl } }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • PKAddPassButton перемещается в верхнюю часть экрана при вызове метода отклонения PKAddPaymentPassViewControllerDelegate.
    Гость » » в форуме IOS
    0 Ответы
    30 Просмотры
    Последнее сообщение Гость
  • Не могу построить `pkaddpaymentpassviewcontrollerdelegate` при настройке модулей Expo
    Anonymous » » в форуме IOS
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Ячейка в сетке игры «Змея» всегда поднимается в верхнюю часть экрана.
    Anonymous » » в форуме Python
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous
  • Просмотр прокрутки толкает элементы в верхнюю часть экрана
    Anonymous » » в форуме IOS
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Просмотр прокрутки толкает элементы в верхнюю часть экрана
    Anonymous » » в форуме IOS
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»