Xamarin - Android - Плагин. Исключение InAppBilling - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь реализовать (в биллинге приложений) для решения форм Xamarin с помощью плагина InAppBilling Я не смог найти полный пример кода или документацию для этого плагина, кроме this Я следую инструкциям шаг за шагом, но когда я запускаю свой код, я получил это исключение

{System.NullReferenceException: Current Context / Activity имеет значение null, убедитесь, что файл MainApplication.cs устанавливает CurrentActivity в вашем исходном коде, чтобы биллинг в приложении мог использовать его.в Plugin.InAppBilling.InAppBillingImplementation.get_Context () [0x00000] в C: \ projects \ inappbillingplugin \ src \ Plugin.InAppBilling.Android \ InAppBillingImplementation.cs: 59 в Plugin.InAppBilling.InAppBillingIntApp.In.pp.itemType) [0x00000] в C: \ projects \ inappbillingplugin \ src \ Plugin.InAppBilling.Android \ InAppBillingImplementation.cs: 372 в myproject.MainPage + d__28.MoveNext () [0x00051] в C: \ Users \ xuser \ source \ repos\ myproject \ MainPage.xaml.cs: 415}

Мой пример кодаЭтот код в (Shared / Portable Class Libraries / .NET Standard)

MainPage.xaml.cs

 public partial class MainPage : ContentPage
    {

     void OnPurchased(object sender, EventArgs e)
            {
              InAppBilling();
            }
     async void InAppBilling()
            {
                try
                {
                    var productId = "xxxxx.xxxx_appbilling";
                    var connected = await CrossInAppBilling.Current.ConnectAsync();
                    if (!connected)
                    {
                        //Couldn't connect to billing, could be offline, alert user
                        return;
                    }
                    //try to purchase item
                    var purchase = await CrossInAppBilling.Current.PurchaseAsync(productId, ItemType.InAppPurchase, "apppayload");
                    if (purchase == null)
                    {
                        //Not purchased, alert the user
                    }
                    else
                    {
                        //Purchased, save this information
                        var id = purchase.Id;
                        var token = purchase.PurchaseToken;
                        var state = purchase.State;
                    }
                }
                catch (Exception ex)
                {
                    //Something bad has occurred, alert user
                }
                finally
                {
                    //Disconnect, it is okay if we never connected
                    await CrossInAppBilling.Current.DisconnectAsync();
                }

            }
}

И этот код вDroid Project

 public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
  protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);
            InAppBillingImplementation.HandleActivityResult(requestCode, resultCode, data);
        }
    }

1 Ответ

0 голосов
/ 23 сентября 2018

Вам не хватает части документа, в которой вы устанавливаете текущую активность (контекст) в методе OnCreate:

Plugin.CurrentActivity.CrossCurrentActivity.Current.Activity = this;

Настройка текущей активности Android

Этоплагин использует плагин Current Activity для получения доступа к текущей активности Android.Обязательно завершите полную настройку, если файл MainApplication.cs не был автоматически добавлен в ваше приложение.Пожалуйста, полностью прочитайте документацию по текущему подключаемому модулю.В абсолютном минимуме вы должны установить следующее в методе OnCreate вашей деятельности:

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