Skip to content

Commit

Permalink
Merge pull request #88 from qonversion/release/3.4.4
Browse files Browse the repository at this point in the history
Release 3.4.4.
  • Loading branch information
SpertsyanKM committed Aug 4, 2022
2 parents d74e09d + 316769c commit 03bc496
Show file tree
Hide file tree
Showing 7 changed files with 237 additions and 73 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import android.content.SharedPreferences;
import android.util.Log;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.qonversion.android.sdk.QUserProperties;
Expand Down Expand Up @@ -140,12 +141,12 @@ public static synchronized void purchase(String productId, String unityCallbackN
Qonversion.purchase(UnityPlayer.currentActivity, productId, new QonversionPermissionsCallback() {
@Override
public void onSuccess(@NotNull Map<String, QPermission> permissions) {
handlePermissionsResponse(permissions, unityCallbackName);
handlePurchaseResponse(permissions, unityCallbackName);
}

@Override
public void onError(@NotNull QonversionError error) {
handleErrorResponse(error, unityCallbackName);
handlePurchaseErrorResponse(error, unityCallbackName);
}
});
}
Expand All @@ -161,12 +162,12 @@ public static synchronized void purchaseProduct(String productJson, String unity
Qonversion.purchase(UnityPlayer.currentActivity, product, new QonversionPermissionsCallback() {
@Override
public void onSuccess(@NotNull Map<String, QPermission> permissions) {
handlePermissionsResponse(permissions, unityCallbackName);
handlePurchaseResponse(permissions, unityCallbackName);
}

@Override
public void onError(@NotNull QonversionError error) {
handleErrorResponse(error, unityCallbackName);
handlePurchaseErrorResponse(error, unityCallbackName);
}
});
} catch (Exception e) {
Expand All @@ -178,12 +179,12 @@ public static synchronized void updatePurchase(String productId, String oldProdu
Qonversion.updatePurchase(UnityPlayer.currentActivity, productId, oldProductId, prorationMode, new QonversionPermissionsCallback() {
@Override
public void onSuccess(@NotNull Map<String, QPermission> permissions) {
handlePermissionsResponse(permissions, unityCallbackName);
handlePurchaseResponse(permissions, unityCallbackName);
}

@Override
public void onError(@NotNull QonversionError error) {
handleErrorResponse(error, unityCallbackName);
handlePurchaseErrorResponse(error, unityCallbackName);
}
});
}
Expand All @@ -199,12 +200,12 @@ public static synchronized void updatePurchaseWithProduct(String newProductJson,
Qonversion.updatePurchase(UnityPlayer.currentActivity, product, oldProductId, prorationMode, new QonversionPermissionsCallback() {
@Override
public void onSuccess(@NotNull Map<String, QPermission> permissions) {
handlePermissionsResponse(permissions, unityCallbackName);
handlePurchaseResponse(permissions, unityCallbackName);
}

@Override
public void onError(@NotNull QonversionError error) {
handleErrorResponse(error, unityCallbackName);
handlePurchaseErrorResponse(error, unityCallbackName);
}
});
} catch (Exception e) {
Expand Down Expand Up @@ -318,18 +319,38 @@ private static void handlePermissionsResponse(@NotNull Map<String, QPermission>
sendMessageToUnity(mappedPermissions, methodName);
}

private static void handlePurchaseResponse(@NotNull Map<String, QPermission> permissions, @NotNull String methodName) {
List<Map<String, Object>> mappedPermissions = Mapper.mapPermissions(permissions);
Map<String, Object> result = new HashMap<>();
result.put("permissions", mappedPermissions);
sendMessageToUnity(result, methodName);
}

private static void handlePurchaseErrorResponse(@NotNull QonversionError error, @NotNull String methodName) {
final ObjectMapper mapper = new ObjectMapper();
final ObjectNode rootNode = createErrorNode(error);
final boolean isCancelled = error.getCode() == QonversionErrorCode.CanceledPurchase;
final JsonNode isCancelledNode = mapper.convertValue(isCancelled, JsonNode.class);
rootNode.set("isCancelled", isCancelledNode);
sendMessageToUnity(rootNode, methodName);
}

private static void handleErrorResponse(@NotNull QonversionError error, @NotNull String methodName) {
final ObjectNode rootNode = createErrorNode(error);
sendMessageToUnity(rootNode, methodName);
}

private static ObjectNode createErrorNode(@NotNull QonversionError error) {
ObjectMapper mapper = new ObjectMapper();
ObjectNode rootNode = mapper.createObjectNode();
ObjectNode node = mapper.createObjectNode();
String message = String.format("%s. %s", error.getDescription(), error.getAdditionalMessage());

ObjectNode errorNode = mapper.createObjectNode();
errorNode.put("message", message);
errorNode.put("code", error.getCode().name());

rootNode.set("error", errorNode);

sendMessageToUnity(rootNode, methodName);
node.set("error", errorNode);
return node;
}

private static void sendMessageToUnity(@NotNull Object objectToConvert, @NotNull String methodName) {
Expand Down
38 changes: 38 additions & 0 deletions Runtime/Scripts/Mapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,44 @@ namespace QonversionUnity
{
internal class Mapper
{
internal static Dictionary<string, Permission> PermissionsFromPurchaseJson(string jsonStr)
{
if (Json.Deserialize(jsonStr) is not Dictionary<string, object> result)
{
Debug.LogError("Could not parse purchase result");
return null;
}

var resultPermissions = new Dictionary<string, Permission>();

if (result["permissions"] is not List<object> permissions)
{
Debug.LogError("Could not parse QPermissions");
return resultPermissions;
}

foreach (Dictionary<string, object> permissionDict in permissions)
{
var permission = new Permission(permissionDict);
resultPermissions.Add(permission.PermissionID, permission);
}

return resultPermissions;
}

internal static bool GetIsCancelledFromJson(string jsonStr)
{
if (Json.Deserialize(jsonStr) is not Dictionary<string, object> result)
{
Debug.LogError("Could not parse purchase result");
return false;
}

var isCancelled = Convert.ToBoolean(result.GetValueOrDefault("isCancelled", 0));

return isCancelled;
}

internal static Dictionary<string, Permission> PermissionsFromJson(string jsonStr)
{
var result = new Dictionary<string, Permission>();
Expand Down
Loading

0 comments on commit 03bc496

Please sign in to comment.