[mono-android] Does anyone have a code example for using Google Market Licensing with MonoDroid?
Mark Eaton
mark.eaton.me at gmail.com
Mon Jan 16 18:53:02 UTC 2012
I've started creating a C# helper class.
Using JNIEnv I can get the Android Device Id.
But I can't create an instance of ABESObfuscator. The signature looks right,
it's just when I create the instance.
The code below is more where I am up to.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
namespace MarketLicensing
{
public class LicenseHelper
{
// Generate 20 random bytes, and put them here.
private Java.Lang.Byte[] Salt = new Java.Lang.Byte[]
{
new Java.Lang.Byte(-46),
new Java.Lang.Byte(65),
new Java.Lang.Byte(30),
new Java.Lang.Byte(-128),
new Java.Lang.Byte(-103),
new Java.Lang.Byte(-57),
new Java.Lang.Byte(74),
new Java.Lang.Byte(-64),
new Java.Lang.Byte(51),
new Java.Lang.Byte(88),
new Java.Lang.Byte(-95),
new Java.Lang.Byte(-45),
new Java.Lang.Byte(77),
new Java.Lang.Byte(-117),
new Java.Lang.Byte(-36),
new Java.Lang.Byte(-113),
new Java.Lang.Byte(-11),
new Java.Lang.Byte(32),
new Java.Lang.Byte(-64),
new Java.Lang.Byte(89)
};
public LicenseHelper(MainActivity activity)
{
// Get Android Device Id
var secure =
JNIEnv.FindClass("android/provider/Settings$Secure");
var secureAndroidId = JNIEnv.GetStaticFieldID(secure,
"ANDROID_ID", "Ljava/lang/String;");
var secureGetString = JNIEnv.GetStaticMethodID(secure,
"getString",
"(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;");
var androidId = JNIEnv.GetStaticObjectField(secure,
secureAndroidId);
var deviceId = JNIEnv.CallStaticObjectMethod(secure,
secureGetString,
new JValue[] { new JValue(activity.ContentResolver.Handle),
new JValue(androidId) });
// Below line proves that I get the android device id
//var aaa = JNIEnv.GetString(deviceId,
JniHandleOwnership.DoNotTransfer);
// Below is the C# method for the above. Proves that the above
does work
//var deviceId2 =
Android.Provider.Settings.Secure.GetString(activity.ContentResolver,
Android.Provider.Settings.Secure.AndroidId);
// Below line proves that I get the package name
///var aaa = JNIEnv.GetString(new
Java.Lang.String(activity.PackageName).Handle,
JniHandleOwnership.DoNotTransfer);
var licensing =
JNIEnv.FindClass("com/android/vending/licensing/LicenseChecker");
var serverPolicy =
JNIEnv.FindClass("com/android/vending/licensing/ServerManagedPolicy");
var aesObfuscator =
JNIEnv.FindClass("com/android/vending/licensing/AESObfuscator");
var saltPointer = JNIEnv.NewArray(Salt);
// Below line proves that I get the Java byte array back
// var aaa = JNIEnv.GetArray<Java.Lang.Byte>(saltPointer);
var aesObfuscatorConstructor = JNIEnv.GetMethodID(aesObfuscator,
"<init>", "([BLjava/lang/String;Ljava/lang/String;)V");
// THERE IS WHERE I AM STUCK!!!!
// ALL THE ABOVE CODE WORKS BUT WHAT AM I DOING WRONG BELOW????
// WILL CRASH!!
var aesObfuscatorInstance = JNIEnv.NewObject(
aesObfuscator,
aesObfuscatorConstructor,
new JValue[] { new JValue(saltPointer), new JValue(new
Java.Lang.String(activity.PackageName).Handle), new JValue(deviceId) });
// Below is what I am ultimately converting
// Construct the LicenseChecker with a policy.
// mChecker = new LicenseChecker(
// this, new ServerManagedPolicy(this,
// new AESObfuscator(SALT, getPackageName(), deviceId)),
// BASE64_PUBLIC_KEY);
//doCheck();
// Clean up
JNIEnv.DeleteLocalRef(aesObfuscatorInstance);
}
}
}
--
View this message in context: http://mono-for-android.1047100.n5.nabble.com/Does-anyone-have-a-code-example-for-using-Google-Market-Licensing-with-MonoDroid-tp5144555p5149556.html
Sent from the Mono for Android mailing list archive at Nabble.com.
More information about the Monodroid
mailing list