dependencies { implementation 'com.android.billingclient:billing:7.1.1' } -keep class com.epicgames.unreal.GooglePlayGamesWrapper { public *; } -keep class com.epicgames.unreal.GooglePlayStoreHelper { public *; } GooglePlayGamesWrapper.Initialize(getApplicationContext()); public boolean AndroidThunkJava_IapBeginPurchase(String[] ProductIds, String AccountId) { Log.debug("[JAVA] - AndroidThunkJava_IapBeginPurchase"); boolean bTriggeredPurchase = false; if( IapStoreHelper != null ) { // sha-256 the accountId and get the hex string representation String ObfuscatedAccountId = null; if (AccountId != null) { try { MessageDigest md = MessageDigest.getInstance("SHA-256"); byte[] sha256hash = md.digest(AccountId.getBytes("UTF-8")); StringBuilder builder = new StringBuilder(sha256hash.length * 2); for (byte b : sha256hash) { builder.append(String.format("%02x", b)); } ObfuscatedAccountId = builder.toString(); } catch (NoSuchAlgorithmException ae) { } catch (UnsupportedEncodingException ee) { } } bTriggeredPurchase = IapStoreHelper.BeginPurchase(ProductIds, ObfuscatedAccountId); } else { Log.debug("[JAVA] - Store Helper is invalid"); } return bTriggeredPurchase; } import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; if (getPackageManager().checkPermission("com.android.vending.BILLING", getPackageName()) == getPackageManager().PERMISSION_GRANTED) { IapStoreHelper = new GooglePlayStoreHelper(this, Log); if (IapStoreHelper != null) { Log.debug("[JAVA] - AndroidThunkJava_IapSetupService - Setup started"); } else { Log.debug("[JAVA] - AndroidThunkJava_IapSetupService - Failed to setup IAP service"); } } else { Log.debug("[JAVA] - AndroidThunkJava_IapSetupService - You do not have the appropriate permission setup."); Log.debug("[JAVA] - AndroidThunkJava_IapSetupService - Please ensure com.android.vending.BILLING is added to the manifest."); } if (requestCode == REQUEST_CODE_SHOW_GOOGLEPLAY_UI) { Log.debug("[JAVA] - GooglePlay external activity UI closed (achievements or leaderboards)"); }