Google Pay возвращает странную ошибку в Xamarin Forms

Я пытаюсь интегрировать Google Pay в свое приложение оболочки Xamarin.Forms. Я не нашел ни одного учебника без использования полосы, только один Kotlin. Я попытался воссоздать пример в своем классе оплаты. Метод Pay() выглядит так:

var activity = Plugin.CurrentActivity.CrossCurrentActivity.Current.Activity;
            client = WalletClass.GetPaymentsClient(activity, new WalletClass.WalletOptions.Builder()
                .SetEnvironment(WalletConstants.EnvironmentTest)
                .SetTheme(WalletConstants.ThemeLight)
                .Build());
            PaymentMethodTokenizationParameters param = PaymentMethodTokenizationParameters.NewBuilder()
                .SetPaymentMethodTokenizationType(WalletConstants.PaymentMethodTokenizationTypePaymentGateway)
                .Build();
            PaymentDataRequest request =  PaymentDataRequest.NewBuilder()
                .SetEmailRequired(false)
                .SetShippingAddressRequired(false)
                .SetPhoneNumberRequired(false)
                .SetTransactionInfo(new TransactionInfo(1,"Test","Test"))
                .SetPaymentMethodTokenizationParameters(param)
                .AddAllowedPaymentMethod(WalletConstants.PaymentMethodTokenizedCard)
                .AddAllowedPaymentMethod(WalletConstants.PaymentMethodCard)
                .SetCardRequirements(CardRequirements.NewBuilder()
                    .AddAllowedCardNetwork(WalletConstants.CardNetworkVisa)
                    .AddAllowedCardNetwork(WalletConstants.CardNetworkMastercard)
                    .Build())
                .Build();
            var data = await client.LoadPaymentDataAsync(request);

Но после последней строки Xamarin возвращает странную ошибку '6: BuyFlow UI needs to be shown.'. Но я полагаю, что последняя строка должна отображать форму пользовательского интерфейса из Google Pay, но почему-то это не работает. Я использую плагины PlaySevices, Gms.Wallet и CurrentActivity.


person Anton Motin    schedule 03.02.2020    source источник


Ответы (2)


Я еще не пробовал это, но, возможно, попробуйте следующее, чтобы помочь вам двигаться вперед https://www.xamboy.com/2020/02/11/braintree-integration-in-xamarin-forms-part-2/

person WhiteFinger    schedule 24.02.2020

Замените это:

var data = await client.LoadPaymentDataAsync(request);

С этим (не асинхронный метод):

var data = client.LoadPaymentData(request); 

И передайте его здесь (53 может быть любым, вы будете использовать его для идентификации этого запроса):

AutoResolveHelper.ResolveTask(data, Xamarin.Essentials.Platform.CurrentActivity, 53);

Затем, после того, как пользователь выполнит фазу выбора карты, вы получите результаты в своем классе MainActivity:

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)

Я нашел эту ссылку наиболее полезной и успешно реализовал: https://stripe.com/docs/google-pay?lang=java

person Edgaras    schedule 02.07.2020