Skip to content

Instantly share code, notes, and snippets.

@cliffgr
Created January 9, 2019 09:16
Show Gist options
  • Save cliffgr/4bca3b9cfde27037336997b5c601df9e to your computer and use it in GitHub Desktop.
Save cliffgr/4bca3b9cfde27037336997b5c601df9e to your computer and use it in GitHub Desktop.
//
// Created by ka on 1/7/2019.
//
#include <clocale>
#include <jni.h>
#include <platform/android/jni/JniHelper.h>
#include "WappierSDK.h"
WappierSDK *WappierSDK::s_WappierSDK = nullptr;
WappierSDK *WappierSDK::getInstance() {
if (nullptr == s_WappierSDK) {
s_WappierSDK = new WappierSDK();
}
return s_WappierSDK;
}
WappierSDK::WappierSDK() {
joAndroidInstance = getWappierInstance();
}
jobject WappierSDK::getWappierInstance() {
JNIEnv *env = cocos2d::JniHelper::getEnv();
jclass someClass = env->FindClass("com/wappier/wappierSDK/Wappier");
if (someClass == NULL) {
env->ExceptionClear();
} else {
jmethodID javaMethodInit = env->GetStaticMethodID(someClass, "getInstance",
"()Lcom/wappier/wappierSDK/Wappier;");
if (javaMethodInit == NULL) {
env->ExceptionClear();
} else {
return env->CallStaticObjectMethod(someClass, javaMethodInit);
}
}
}
jobject WappierSDK::startSession(const char *appToken) {
JNIEnv *env = cocos2d::JniHelper::getEnv();
jclass someClass = env->FindClass("com/wappier/wappierSDK/Wappier");
jobject wappierInstance = getWappierInstance();
if (someClass == NULL) {
env->ExceptionClear();
} else {
jmethodID startSessionMethod = env->GetMethodID(someClass, "startSession",
"(Landroid/content/Context;Ljava/lang/String;)Lcom/wappier/wappierSDK/Wappier;");
if (startSessionMethod == NULL) {
env->ExceptionClear();
} else {
jobject context = getGlobalContext(env);
jstring jstrAppToken = (appToken != NULL) ? env->NewStringUTF(appToken) : NULL;
joAndroidInstance = env->CallObjectMethod(wappierInstance, startSessionMethod,
context,
jstrAppToken);
env->DeleteLocalRef(jstrAppToken);
}
}
return wappierInstance;
}
jobject WappierSDK::setUserName(const char *userName) {
JNIEnv *env = cocos2d::JniHelper::getEnv();
jclass someClass = env->FindClass("com/wappier/wappierSDK/Wappier");
jobject wappierInstance = getWappierInstance();
if (someClass == NULL) {
env->ExceptionClear();
} else {
jmethodID setUserNameMethod = env->GetMethodID(someClass, "setUserName",
"(Ljava/lang/String;)Lcom/wappier/wappierSDK/Wappier;");
if (setUserNameMethod == NULL) {
env->ExceptionClear();
} else {
jobject context = getGlobalContext(env);
jstring jstrUserName = (userName != NULL) ? env->NewStringUTF(userName) : NULL;
joAndroidInstance = env->CallObjectMethod(wappierInstance, setUserNameMethod,
context,
jstrUserName);
env->DeleteLocalRef(jstrUserName);
}
}
return wappierInstance;
}
void WappierSDK::trackAction(const char *appAction) {
JNIEnv *env = cocos2d::JniHelper::getEnv();
jclass someClass = env->FindClass("com/wappier/wappierSDK/Wappier");
jobject wappierInstance = getWappierInstance();
if (someClass == NULL) {
env->ExceptionClear();
} else {
jmethodID trackActionMethod = env->GetMethodID(someClass, "trackAction",
"(Ljava/lang/String;)V");
if (trackActionMethod == NULL) {
env->ExceptionClear();
} else {
jstring jstrAppAction = (appAction != NULL) ? env->NewStringUTF(appAction) : NULL;
env->CallVoidMethod(wappierInstance, trackActionMethod, jstrAppAction);
env->DeleteLocalRef(jstrAppAction);
}
}
}
void WappierSDK::trackPurchase(const double revenue, const char *currencyCode,
const char *googleOrderId,
const char *productId, const char *purchaseToken,
const char *purchaseType) {
JNIEnv *env = cocos2d::JniHelper::getEnv();
jclass someClass = env->FindClass("com/wappier/wappierSDK/Wappier");
jobject wappierInstance = getWappierInstance();
if (someClass == NULL) {
env->ExceptionClear();
} else {
jmethodID trackTrackPurchaseMethod = env->GetMethodID(someClass, "trackPurchase",
"(DLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
if (trackTrackPurchaseMethod == NULL) {
env->ExceptionClear();
} else {
jstring jstrCurrencyCode = (currencyCode != NULL) ? env->NewStringUTF(currencyCode)
: NULL;
jstring jstrGoogleOrderId = (googleOrderId != NULL) ? env->NewStringUTF(googleOrderId)
: NULL;
jstring jstrProductId = (productId != NULL) ? env->NewStringUTF(productId) : NULL;
jstring jstrPurchaseToken = (purchaseToken != NULL) ? env->NewStringUTF(purchaseToken)
: NULL;
jstring jstrPurchaseType = (purchaseType != NULL) ? env->NewStringUTF(purchaseType)
: NULL;
env->CallVoidMethod(wappierInstance, trackTrackPurchaseMethod, revenue,
jstrCurrencyCode, jstrGoogleOrderId, jstrProductId,
jstrPurchaseToken, jstrPurchaseType);
}
}
}
jobject WappierSDK::getGlobalContext(JNIEnv *env) {
jclass activityThread = env->FindClass("android/app/ActivityThread");
jmethodID currentActivityThread = env->GetStaticMethodID(activityThread,
"currentActivityThread",
"()Landroid/app/ActivityThread;");
jobject at = env->CallStaticObjectMethod(activityThread, currentActivityThread);
jmethodID getApplication = env->GetMethodID(activityThread, "getApplication",
"()Landroid/app/Application;");
return env->CallObjectMethod(at, getApplication);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment