【问题标题】:Xamarin InAppBilling SubscriptionXamarin InAppBilling 订阅
【发布时间】:2015-04-09 12:41:15
【问题描述】:

我正在尝试实现InAppBilling (Android) 订阅。我正在尝试使用 component (Xamarin.InAppBilling)。我可以购买订阅,但是当我尝试通过订阅购买商品时,我没有任何回报。您如何实现IAB (Android) 订阅?有人有例子吗?

[编辑]

public class PurchaseManager : IPlayListener
{
    MLActivity2 _act;
    BillingService m_service;
    int m_requestId = 1;

    //String _productId = "subscription.test";

    //atributos IAB
    String _publicKey = "";
    String _productId = "";
    public bool _premium;

    public PurchaseManager(MLActivity2 act)
    {
        _act = act;
        IniciarPurchase();
    }

    public void OnActivityResult (int requestCode, Result resultCode, Intent data)
    {
        m_service.HandleActivityResult(requestCode, (int)resultCode, data);
    }

    public void Finalizar()
    {
        if (m_service != null)
            m_service.Dispose();
    }

    //Process referentes a IAB
    private void IniciarPurchase ()
    {
        Security.ExpectSignature = false;
        m_service = new BillingService(_act, this, _publicKey);
        var connTask = m_service.Connect();
        //Load inventory on start-up
        connTask.ContinueWith(t =>
            {
                if (t.Result)
                {
                    VerificarAssinatura();
                }
            });
    }

    public void Connected()
    {           
    }

    public void Disconnected()
    {
    }

    private void VerificarAssinatura()
    {
        //Existing purchases
        m_service.SendRequest<GetPurchasesResponse>(new GetPurchases(play.billing.v3.Consts.ITEM_TYPE_SUBS, m_requestId++)).ContinueWith(tGP =>
            {
                _act.RunOnUiThread(() =>
                    {
                        if (tGP.Result.Success)
                        {
                            foreach (Purchase item in tGP.Result.PurchasedItems) 
                                MLActivity2.UiShowToast(_act, "", "Order id" + item.OrderId, true);

                            if (tGP.Result.PurchasedItems.Count == 0)
                                MLActivity2.UiShowToast(_act, "", "nao tem item", true);
                        }
                        else
                            MLActivity2.UiShowToast(_act, _act.GetString(Resource.String.msg_erro), "Purchases request failure. Error: " + tGP.Result.Message, false);
                    });
            });
        //Existing purchases
        m_service.SendRequest<GetPurchasesResponse>(new GetPurchases(play.billing.v3.Consts.ITEM_TYPE_INAPP, m_requestId++)).ContinueWith(tGP =>
            {
                _act.RunOnUiThread(() =>
                    {
                        if (tGP.Result.Success)
                        {
                            foreach (Purchase item in tGP.Result.PurchasedItems) 
                                MLActivity2.UiShowToast(_act, "", "Order id" + item.OrderId, true);

                            if (tGP.Result.PurchasedItems.Count == 0)
                                MLActivity2.UiShowToast(_act, "", "nao tem item", true);
                        }
                        else
                            MLActivity2.UiShowToast(_act, _act.GetString(Resource.String.msg_erro), "2222Purchases request failure. Error: " + tGP.Result.Message, false);
                    });
            });
    }

    public void JaPossuiAssinatura()
    {
        MLActivity2.UiShowToast(_act, _act.GetString(Resource.String.assinatura_japossui_titulo), _act.GetString(Resource.String.assinatura_japossui_texto), true);
    }

    public void Comprar ()
    {
        var req = new Buy(_productId, m_requestId++);

        m_service.SendRequest<Response>(req).ContinueWith(t =>
            {
                _act.RunOnUiThread(() =>
                    {
                        if (t.Result.Success)
                            VerificarAssinatura();
                        else
                            MLActivity2.UiShowToast(_act, _act.GetString(Resource.String.msg_erro), "Purchases request failure. Error: " + t.Result.Message, false);
                    });
            }); 
    }

    void CompraComSucesso()
    {
        MLActivity2.UiShowToast(_act, _act.GetString(Resource.String.assinatura_sucesso_titulo), _act.GetString(Resource.String.assinatura_sucesso_texto), true);
    }

    void ErroNaCompra()
    {
        //MLActivity2.UiShowToast(_act, _act.GetString(Resource.String.msg_erro), _act.GetString(Resource.String.assinatura_problema), false);
    }
}

【问题讨论】:

    标签: android xamarin in-app-billing subscription


    【解决方案1】:

    添加代码 sn-p 始终有助于更快地获得正确答案。下次别忘了;)

    当您查询购买时,请确保您使用正确的商品类型:subscription(而不是 product)。如果两者都有,则必须执行两个查询 - 一个查询产品,一个查询订阅。

    【讨论】:

    • 是的,我使用项目类型订阅。
    猜你喜欢
    • 2017-06-06
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多