Skip to content

Commit 6dc4806

Browse files
committed
Add GetOwnedProducts API
1 parent eb97ae2 commit 6dc4806

9 files changed

Lines changed: 332 additions & 10 deletions

File tree

android/src/main/java/com/farsitel/bazaar/PoolakeyBridge.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import com.farsitel.bazaar.callback.ConnectionCallback;
77
import com.farsitel.bazaar.callback.ConsumeCallback;
8+
import com.farsitel.bazaar.callback.OwnedProductsCallback;
89
import com.farsitel.bazaar.callback.PaymentCallback;
910
import com.farsitel.bazaar.callback.SKUDetailsCallback;
1011

@@ -64,6 +65,10 @@ public void getSkuDetails(String type, String productIds, SKUDetailsCallback cal
6465
PoolakeyKotlinBridge.INSTANCE.getSkuDetails(type, Arrays.asList(productIds.split(",")), callback);
6566
}
6667

68+
public void getOwnedProducts(String type, OwnedProductsCallback callback) {
69+
PoolakeyKotlinBridge.INSTANCE.getOwnedProducts(type, callback);
70+
}
71+
6772
public void purchase(String type, String productId, String payload, String dynamicPriceToken, PaymentCallback callback) {
6873
PaymentActivity.Command cmd = PaymentActivity.Command.PurchaseProduct;
6974
if (!type.equalsIgnoreCase("inApp"))

android/src/main/java/com/farsitel/bazaar/PoolakeyKotlinBridge.kt

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@ package com.farsitel.bazaar
22

33
import android.app.Activity
44
import android.content.Context
5-
import com.farsitel.bazaar.callback.ConnectionCallback
6-
import com.farsitel.bazaar.callback.ConsumeCallback
7-
import com.farsitel.bazaar.callback.PaymentCallback
8-
import com.farsitel.bazaar.callback.SKUDetailsCallback
5+
import com.farsitel.bazaar.callback.*
96
import ir.cafebazaar.poolakey.Connection
107
import ir.cafebazaar.poolakey.ConnectionState
118
import ir.cafebazaar.poolakey.Payment
@@ -59,6 +56,32 @@ object PoolakeyKotlinBridge {
5956
}
6057
}
6158

59+
fun getOwnedProducts(type:String, callback: OwnedProductsCallback) {
60+
if (connection.getState() != ConnectionState.Connected) {
61+
callback.onFailure("Connection not found.", "In order to getting purchases, connect to Poolakey!")
62+
return
63+
}
64+
when (type) {
65+
"inApp" -> payment.getPurchasedProducts {
66+
querySucceed(callback::onSuccess)
67+
queryFailed { throwable ->
68+
callback.onFailure(
69+
throwable.message,
70+
throwable.stackTrace.joinToString { "\n" })
71+
}
72+
}
73+
else ->
74+
payment.getSubscribedProducts {
75+
querySucceed(callback::onSuccess)
76+
queryFailed { throwable ->
77+
callback.onFailure(
78+
throwable.message,
79+
throwable.stackTrace.joinToString { "\n" })
80+
}
81+
}
82+
}
83+
}
84+
6285
fun startActivity(
6386
activity: Activity,
6487
command: PaymentActivity.Command,
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.farsitel.bazaar.callback;
2+
3+
import java.util.List;
4+
5+
import ir.cafebazaar.poolakey.entity.PurchaseInfo;
6+
import ir.cafebazaar.poolakey.entity.SkuDetails;
7+
8+
public interface OwnedProductsCallback {
9+
void onSuccess(List<PurchaseInfo> data);
10+
void onFailure(String message, String stackTrace);
11+
}

unity/Assets/Poolakey/Demo/DemoScene.unity

Lines changed: 217 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,218 @@ CanvasRenderer:
465465
m_PrefabAsset: {fileID: 0}
466466
m_GameObject: {fileID: 65512612}
467467
m_CullTransparentMesh: 0
468+
--- !u!1 &120286140
469+
GameObject:
470+
m_ObjectHideFlags: 0
471+
m_CorrespondingSourceObject: {fileID: 0}
472+
m_PrefabInstance: {fileID: 0}
473+
m_PrefabAsset: {fileID: 0}
474+
serializedVersion: 6
475+
m_Component:
476+
- component: {fileID: 120286141}
477+
- component: {fileID: 120286143}
478+
- component: {fileID: 120286142}
479+
m_Layer: 5
480+
m_Name: Text
481+
m_TagString: Untagged
482+
m_Icon: {fileID: 0}
483+
m_NavMeshLayer: 0
484+
m_StaticEditorFlags: 0
485+
m_IsActive: 1
486+
--- !u!224 &120286141
487+
RectTransform:
488+
m_ObjectHideFlags: 0
489+
m_CorrespondingSourceObject: {fileID: 0}
490+
m_PrefabInstance: {fileID: 0}
491+
m_PrefabAsset: {fileID: 0}
492+
m_GameObject: {fileID: 120286140}
493+
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
494+
m_LocalPosition: {x: 0, y: 0, z: 0}
495+
m_LocalScale: {x: 1, y: 1, z: 1}
496+
m_Children: []
497+
m_Father: {fileID: 465240298}
498+
m_RootOrder: 0
499+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
500+
m_AnchorMin: {x: 0, y: 0}
501+
m_AnchorMax: {x: 1, y: 1}
502+
m_AnchoredPosition: {x: 0, y: 0}
503+
m_SizeDelta: {x: 0, y: 0}
504+
m_Pivot: {x: 0.5, y: 0.5}
505+
--- !u!114 &120286142
506+
MonoBehaviour:
507+
m_ObjectHideFlags: 0
508+
m_CorrespondingSourceObject: {fileID: 0}
509+
m_PrefabInstance: {fileID: 0}
510+
m_PrefabAsset: {fileID: 0}
511+
m_GameObject: {fileID: 120286140}
512+
m_Enabled: 1
513+
m_EditorHideFlags: 0
514+
m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
515+
m_Name:
516+
m_EditorClassIdentifier:
517+
m_Material: {fileID: 0}
518+
m_Color: {r: 0.26415092, g: 0.26415092, b: 0.26415092, a: 1}
519+
m_RaycastTarget: 1
520+
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
521+
m_Maskable: 1
522+
m_OnCullStateChanged:
523+
m_PersistentCalls:
524+
m_Calls: []
525+
m_FontData:
526+
m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
527+
m_FontSize: 30
528+
m_FontStyle: 1
529+
m_BestFit: 0
530+
m_MinSize: 10
531+
m_MaxSize: 41
532+
m_Alignment: 4
533+
m_AlignByGeometry: 0
534+
m_RichText: 1
535+
m_HorizontalOverflow: 0
536+
m_VerticalOverflow: 0
537+
m_LineSpacing: 1
538+
m_Text: Get Purchases
539+
--- !u!222 &120286143
540+
CanvasRenderer:
541+
m_ObjectHideFlags: 0
542+
m_CorrespondingSourceObject: {fileID: 0}
543+
m_PrefabInstance: {fileID: 0}
544+
m_PrefabAsset: {fileID: 0}
545+
m_GameObject: {fileID: 120286140}
546+
m_CullTransparentMesh: 0
547+
--- !u!1 &465240297
548+
GameObject:
549+
m_ObjectHideFlags: 0
550+
m_CorrespondingSourceObject: {fileID: 0}
551+
m_PrefabInstance: {fileID: 0}
552+
m_PrefabAsset: {fileID: 0}
553+
serializedVersion: 6
554+
m_Component:
555+
- component: {fileID: 465240298}
556+
- component: {fileID: 465240301}
557+
- component: {fileID: 465240300}
558+
- component: {fileID: 465240299}
559+
m_Layer: 5
560+
m_Name: GetPurchases
561+
m_TagString: Untagged
562+
m_Icon: {fileID: 0}
563+
m_NavMeshLayer: 0
564+
m_StaticEditorFlags: 0
565+
m_IsActive: 1
566+
--- !u!224 &465240298
567+
RectTransform:
568+
m_ObjectHideFlags: 0
569+
m_CorrespondingSourceObject: {fileID: 0}
570+
m_PrefabInstance: {fileID: 0}
571+
m_PrefabAsset: {fileID: 0}
572+
m_GameObject: {fileID: 465240297}
573+
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
574+
m_LocalPosition: {x: 0, y: 0, z: 0}
575+
m_LocalScale: {x: 1, y: 1, z: 1}
576+
m_Children:
577+
- {fileID: 120286141}
578+
m_Father: {fileID: 1587869380155104686}
579+
m_RootOrder: 5
580+
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
581+
m_AnchorMin: {x: 0, y: 0}
582+
m_AnchorMax: {x: 0, y: 0}
583+
m_AnchoredPosition: {x: 0, y: 0}
584+
m_SizeDelta: {x: 0, y: 0}
585+
m_Pivot: {x: 0.5, y: 0.5}
586+
--- !u!114 &465240299
587+
MonoBehaviour:
588+
m_ObjectHideFlags: 0
589+
m_CorrespondingSourceObject: {fileID: 0}
590+
m_PrefabInstance: {fileID: 0}
591+
m_PrefabAsset: {fileID: 0}
592+
m_GameObject: {fileID: 465240297}
593+
m_Enabled: 1
594+
m_EditorHideFlags: 0
595+
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
596+
m_Name:
597+
m_EditorClassIdentifier:
598+
m_Navigation:
599+
m_Mode: 3
600+
m_WrapAround: 0
601+
m_SelectOnUp: {fileID: 0}
602+
m_SelectOnDown: {fileID: 0}
603+
m_SelectOnLeft: {fileID: 0}
604+
m_SelectOnRight: {fileID: 0}
605+
m_Transition: 1
606+
m_Colors:
607+
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
608+
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
609+
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
610+
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
611+
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
612+
m_ColorMultiplier: 1
613+
m_FadeDuration: 0.1
614+
m_SpriteState:
615+
m_HighlightedSprite: {fileID: 0}
616+
m_PressedSprite: {fileID: 0}
617+
m_SelectedSprite: {fileID: 0}
618+
m_DisabledSprite: {fileID: 0}
619+
m_AnimationTriggers:
620+
m_NormalTrigger: Normal
621+
m_HighlightedTrigger: Highlighted
622+
m_PressedTrigger: Pressed
623+
m_SelectedTrigger: Highlighted
624+
m_DisabledTrigger: Disabled
625+
m_Interactable: 1
626+
m_TargetGraphic: {fileID: 465240300}
627+
m_OnClick:
628+
m_PersistentCalls:
629+
m_Calls:
630+
- m_Target: {fileID: 1587869380155104681}
631+
m_TargetAssemblyTypeName: PoolakeyExample, Assembly-CSharp
632+
m_MethodName: GetOwnedProducts
633+
m_Mode: 1
634+
m_Arguments:
635+
m_ObjectArgument: {fileID: 0}
636+
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
637+
m_IntArgument: 0
638+
m_FloatArgument: 0
639+
m_StringArgument:
640+
m_BoolArgument: 0
641+
m_CallState: 2
642+
--- !u!114 &465240300
643+
MonoBehaviour:
644+
m_ObjectHideFlags: 0
645+
m_CorrespondingSourceObject: {fileID: 0}
646+
m_PrefabInstance: {fileID: 0}
647+
m_PrefabAsset: {fileID: 0}
648+
m_GameObject: {fileID: 465240297}
649+
m_Enabled: 1
650+
m_EditorHideFlags: 0
651+
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
652+
m_Name:
653+
m_EditorClassIdentifier:
654+
m_Material: {fileID: 0}
655+
m_Color: {r: 1, g: 1, b: 1, a: 1}
656+
m_RaycastTarget: 1
657+
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
658+
m_Maskable: 1
659+
m_OnCullStateChanged:
660+
m_PersistentCalls:
661+
m_Calls: []
662+
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
663+
m_Type: 1
664+
m_PreserveAspect: 0
665+
m_FillCenter: 1
666+
m_FillMethod: 4
667+
m_FillAmount: 1
668+
m_FillClockwise: 1
669+
m_FillOrigin: 0
670+
m_UseSpriteMesh: 0
671+
m_PixelsPerUnitMultiplier: 1
672+
--- !u!222 &465240301
673+
CanvasRenderer:
674+
m_ObjectHideFlags: 0
675+
m_CorrespondingSourceObject: {fileID: 0}
676+
m_PrefabInstance: {fileID: 0}
677+
m_PrefabAsset: {fileID: 0}
678+
m_GameObject: {fileID: 465240297}
679+
m_CullTransparentMesh: 0
468680
--- !u!1 &488007352
469681
GameObject:
470682
m_ObjectHideFlags: 0
@@ -785,7 +997,7 @@ MonoBehaviour:
785997
m_Alignment: 0
786998
m_AlignByGeometry: 0
787999
m_RichText: 1
788-
m_HorizontalOverflow: 1
1000+
m_HorizontalOverflow: 0
7891001
m_VerticalOverflow: 1
7901002
m_LineSpacing: 1
7911003
m_Text:
@@ -1740,7 +1952,7 @@ MonoBehaviour:
17401952
m_HorizontalOverflow: 0
17411953
m_VerticalOverflow: 0
17421954
m_LineSpacing: 1
1743-
m_Text: purchase List
1955+
m_Text: Get SKUDetails
17441956
--- !u!222 &1587869379733683969
17451957
CanvasRenderer:
17461958
m_ObjectHideFlags: 0
@@ -1921,6 +2133,7 @@ RectTransform:
19212133
- {fileID: 1587869379504262204}
19222134
- {fileID: 1587869379224001567}
19232135
- {fileID: 1587869380520777824}
2136+
- {fileID: 465240298}
19242137
m_Father: {fileID: 1478282524}
19252138
m_RootOrder: 0
19262139
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -2233,7 +2446,7 @@ MonoBehaviour:
22332446
m_Calls:
22342447
- m_Target: {fileID: 1587869380155104681}
22352448
m_TargetAssemblyTypeName: PoolakeyExample, Assembly-CSharp
2236-
m_MethodName: GetPurchaseSkuDetails
2449+
m_MethodName: GetSkuDetails
22372450
m_Mode: 1
22382451
m_Arguments:
22392452
m_ObjectArgument: {fileID: 0}
@@ -2294,7 +2507,7 @@ GameObject:
22942507
- component: {fileID: 1587869380520777826}
22952508
- component: {fileID: 1587869380520777825}
22962509
m_Layer: 5
2297-
m_Name: GetPurchases
2510+
m_Name: GetSKUDetails
22982511
m_TagString: Untagged
22992512
m_Icon: {fileID: 0}
23002513
m_NavMeshLayer: 0

unity/Assets/Poolakey/Demo/PoolakeyExample.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using UnityEngine;
1+
using UnityEngine;
22
using Poolakey.Scripts;
33
using UnityEngine.UI;
44
using Poolakey;
@@ -31,7 +31,18 @@ public async void Connect()
3131
}
3232
}
3333

34-
34+
public async void GetOwnedProducts()
35+
{
36+
var result = await payment.GetOwnedProducts();
37+
if (result.status == Status.Success)
38+
{
39+
foreach (var purchase in result.data)
40+
{
41+
Log(purchase.ToString());
42+
}
43+
}
44+
}
45+
3546
public async void GetSkuDetails()
3647
{
3748
var result = await payment.GetSkuDetails("product_1,product_2");
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System.Collections.Generic;
2+
using Poolakey.Scripts.Data;
3+
using UnityEngine;
4+
5+
namespace Poolakey.Scripts.Callbacks
6+
{
7+
public class OwnedProductsCallbackProxy : BaseCallbackProxy
8+
{
9+
public OwnedProductsCallbackProxy() : base("com.farsitel.bazaar.callback.OwnedProductsCallback"){}
10+
11+
void onSuccess(AndroidJavaObject purchaseEntity)
12+
{
13+
var list = new List<PurchaseInfo>();
14+
var size = purchaseEntity.Call<int>("size");
15+
for (int index = 0; index < size; index++)
16+
{
17+
list.Add(new PurchaseInfo(purchaseEntity.Call<AndroidJavaObject>("get", index)));
18+
}
19+
result = new OwnedProductsResult(Status.Success, list, "Fetch Owned products completed.");
20+
}
21+
22+
void onFailure(string message, string stackTrace)
23+
{
24+
result = new OwnedProductsResult(Status.Failure, null, message, stackTrace);
25+
}
26+
}
27+
}

0 commit comments

Comments
 (0)