// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
|
package com.unity3d.player;
|
|
import android.app.Activity;
|
import android.app.AlertDialog;
|
import android.content.DialogInterface;
|
import android.content.Intent;
|
import android.content.res.Configuration;
|
import android.os.Bundle;
|
import android.text.TextUtils;
|
import android.util.Log;
|
import android.view.KeyEvent;
|
import android.view.MotionEvent;
|
import android.view.Window;
|
|
import com.bjsk.sdk.m.BJSKMsdk;
|
import com.bjsk.sdk.m.BJSKMsdkCallback;
|
import com.bytedance.applog.AppLog;
|
import com.bytedance.applog.GameReportHelper;
|
import com.google.gson.Gson;
|
|
import org.json.JSONArray;
|
import org.json.JSONException;
|
import org.json.JSONObject;
|
|
|
import java.io.UnsupportedEncodingException;
|
import java.util.ArrayList;
|
import java.util.Collections;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Set;
|
|
import static com.bun.miitmdid.core.JLibrary.context;
|
|
public class UnityPlayerActivity extends Activity implements IUnityPlayerLifecycleEvents {
|
protected UnityPlayer mUnityPlayer; // don't change the name of this variable; referenced from native code
|
private static String ucaller;
|
private static String uFuncName;
|
private static String actionNames;
|
private String TAG = "UnityPlayerActivity";
|
public static UnityPlayerActivity instance = null; //单例类
|
|
// Override this in your custom UnityPlayerActivity to tweak the command line arguments passed to the Unity Android Player
|
// The command line arguments are passed as a string, separated by spaces
|
// UnityPlayerActivity calls this from 'onCreate'
|
// Supported: -force-gles20, -force-gles30, -force-gles31, -force-gles31aep, -force-gles32, -force-gles, -force-vulkan
|
// See https://docs.unity3d.com/Manual/CommandLineArguments.html
|
// @param cmdLine the current command line arguments, may be null
|
// @return the modified command line string or null
|
protected String updateUnityCommandLineArguments(String cmdLine) {
|
return cmdLine;
|
}
|
|
// Setup activity layout
|
@Override
|
protected void onCreate(Bundle savedInstanceState) {
|
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
super.onCreate(savedInstanceState);
|
|
String cmdLine = updateUnityCommandLineArguments(getIntent().getStringExtra("unity"));
|
getIntent().putExtra("unity", cmdLine);
|
instance = this;
|
|
mUnityPlayer = new UnityPlayer(this, this);
|
setContentView(mUnityPlayer);
|
mUnityPlayer.requestFocus();
|
}
|
|
//利用Toast
|
public int unityCall(final String actionName, final String arg1, final String arg2) {
|
Log.e("unityCall", "unityCall" + actionName + "--arg1--" + arg1);
|
actionNames = actionName;
|
switch (actionName) {
|
case "changeAccount":
|
|
break;
|
case "enterShareAndFeed":
|
// SJSDKUnityBridge.getInstance().share(actionName,arg3);
|
break;
|
case "getGameFriends":
|
// SJSDKUnityBridge.getInstance().s
|
break;
|
case "getUserInfo":
|
// SJSDKUnityBridge.getInstance().deviceInfo(actionName,arg3);
|
break;
|
case "initSdk":
|
// SJSDKPlugin.getInstance().initSDK(actionName,instance);
|
|
BJSKMsdk.getInstance().doInit(instance, ConstantsUtils.KtBuyAppKey, new BJSKMsdkCallback() {
|
|
@Override
|
public void onInitSuccess() {
|
// showToast("初始化成功,游戏中不需要此提示");
|
Log.e(TAG, "onInitSuccess_arg0");
|
// BJSKMsdk.getInstance().userLogin(instance);
|
LoginData loginData = new LoginData();
|
loginData.setAction(actionNames);
|
loginData.setData("ok");
|
//1、使用JSONObject
|
|
Gson gson = new Gson();
|
String str = gson.toJson(loginData);
|
|
SendUnity(str);
|
}
|
|
@Override
|
public void onInitFail(String message) {
|
// 不需要提示失败的原因,CP自行处理失败逻辑,如重新进入游戏等
|
// showToast("初始化失败,提示玩家退出重新进入");、
|
Log.e(TAG, "onInitFail_arg0" + message);
|
LoginData loginData = new LoginData();
|
loginData.setAction(actionNames);
|
loginData.setData(message);
|
//1、使用JSONObject
|
|
Gson gson = new Gson();
|
String str = gson.toJson(loginData);
|
SendUnity(str);
|
}
|
|
@Override
|
public void onLoginSuccess(Bundle bundle) {
|
// 注意:客户端登录成功后,只能获取到token,其他用户信息如uid等需要去我方服务器进行token验证后获取
|
// 获取token格式如下
|
String token = bundle.getString("token");
|
// checkBandle(bundle);
|
|
new Thread(new Runnable() {
|
@Override
|
public void run() {
|
loginVerty(instance, token);
|
}
|
}).start();
|
|
|
}
|
|
|
@Override
|
public void onLoginFail(String message) {
|
Log.e(TAG, "hongwu fail login =---" + message);
|
LoginData loginData = new LoginData();
|
loginData.setAction(actionNames);
|
loginData.setData(message);
|
Gson gson = new Gson();
|
String str = gson.toJson(loginData);
|
SendUnity(str);
|
}
|
|
@Override
|
public void onUserSwitchSuccess(Bundle bundle) {
|
|
}
|
|
@Override
|
public void onUserSwitchFail(String message) {
|
Log.e(TAG, "onUserSwitchFail");
|
|
}
|
|
@Override
|
public void onPaySuccess(Bundle bundle) {
|
// 请CP以服务端的信息为准
|
Log.e(TAG, "onPaySuccess");
|
|
}
|
|
@Override
|
public void onPayFail(String message) {
|
|
}
|
|
@Override
|
public void onExitGameSuccess() {
|
// 退出游戏,CP需要进行游戏退出的操作
|
System.exit(1);
|
}
|
|
@Override
|
public void onExitGameFail() {
|
// 暂不需要操作
|
// showToast("用户取消退出");
|
}
|
|
@Override
|
public void onLogoutSuccess() {
|
// 1.SDK用户退出,回到游戏登录界面
|
//2.再次调用登录接口userLogin
|
|
// showGameLoginView();
|
Log.e(TAG, "LogoutonSuccess");
|
|
}
|
|
@Override
|
public void onLogoutFail(String message) {
|
// 暂不需要操作
|
Log.e(TAG, "LogoutonFailed");
|
// SJSDK.getInstance().onLogout(SJCode.CODE_LOGOUT_FAIL);
|
}
|
});
|
|
break;
|
case "killGame":
|
// SJSDKUnityBridge.getInstance().exit(actionName,arg3);
|
break;
|
case "login":
|
// SJSDKUnityBridge.getInstance().login(actionName,arg3);
|
BJSKMsdk.getInstance().userLogin(instance);
|
break;
|
case "logout":
|
// SJSDKUnityBridge.getInstance().logout(actionName,arg3);
|
BJSKMsdk.getInstance().doExitGame(instance);
|
// extDilog();
|
|
break;
|
case "recharge":
|
// SJSDKUnityBridge.getInstance().pay(actionName,arg3);
|
break;
|
case "sendMessageToPlatform":
|
break;
|
case "showUserAuthentication":
|
break;
|
case "setCallBackClazz":
|
ucaller = arg1;
|
uFuncName = arg2;
|
break;
|
|
}
|
return 0;
|
|
}
|
|
private void extDilog() {
|
instance.runOnUiThread(new Runnable() {
|
@Override
|
public void run() {
|
new AlertDialog.Builder(instance)
|
.setTitle("确认退出游戏?")
|
.setPositiveButton("确定",
|
new DialogInterface.OnClickListener() {
|
public void onClick(DialogInterface dialog,
|
int which) {
|
// 回收sdk资源(必须先destroySDK再finish游戏)
|
instance.finish();
|
System.exit(0);
|
}
|
})
|
.setNegativeButton("取消",
|
new DialogInterface.OnClickListener() {
|
|
@Override
|
public void onClick(DialogInterface dialog,
|
int which) {
|
}
|
}).show();
|
|
}
|
});
|
}
|
|
private void checkBandle(Bundle bundle) {
|
boolean isAuth = bundle.getBoolean("isAuth");
|
int authAge = bundle.getInt("authAge");
|
JSONObject json = new JSONObject();
|
|
Set<String> keys = bundle.keySet();
|
for (String key : keys) {
|
try {
|
// json.put(key, bundle.get(key)); see edit below
|
json.put(key, JSONObject.wrap(bundle.get(key)));
|
} catch (JSONException e) {
|
//Handle exception here
|
}
|
}
|
|
LoginData loginData = new LoginData();
|
loginData.setAction("login");
|
loginData.setData(json);
|
Log.e(TAG, "onLoginSuccess" + loginData.toString());
|
}
|
|
private void loginVerty(Activity activity, String token) {
|
String gid = BJSKMsdk.getInstance().getGid(activity);
|
String pid = BJSKMsdk.getInstance().getPid(activity);
|
Map<String, String> params = new HashMap<String, String>();
|
params.put("pid", pid + "");
|
params.put("gid", gid + "");
|
params.put("access_token", token + "");
|
String timestamp = System.currentTimeMillis() / 1000 + "";
|
params.put("tm", timestamp);
|
String signStr = getSignData(params);
|
String sign = MD5Util.md5(signStr + "&" + ConstantsUtils.KtBuyAppKey);
|
params.put("sign", sign);
|
Log.e("result", "params" + params.toString());
|
String result = UnityHttpUtils.httpPost(this, "https://api.kt007.com/api/v1/verify/user", params).replace("\"", "");
|
Log.e("result", "result" + result);
|
Gson gsons = new Gson();
|
ResultModel ResultModel = gsons.fromJson(result, ResultModel.class);
|
com.unity3d.player.ResultModel.DataBean data = (com.unity3d.player.ResultModel.DataBean) ResultModel.getData();
|
/**
|
* 上送登录校验结果数据
|
*/
|
Log.d(TAG, "SJTouTiaoSDK loginSuccess!==data.getOpenid()=" + data.getOpenid());
|
GameReportHelper.onEventRegister("userNumber",true);
|
AppLog.setUserUniqueID(data.getOpenid());
|
LoginData loginData = new LoginData();
|
loginData.setAction(actionNames);
|
loginData.setData(ResultModel);
|
Gson gson = new Gson();
|
String str = gson.toJson(loginData);
|
SendUnity(str);
|
|
}
|
|
|
private String getSignData(Map<String, String> params) {
|
StringBuffer content = new StringBuffer();
|
List<String> keys = new ArrayList<String>(params.keySet());
|
// 按照自然升序处理
|
Collections.sort(keys);
|
|
for (int i = 0; i < keys.size(); i++) {
|
String key = (String) keys.get(i);
|
// sign参数不参与签名数据
|
if ("sign".equals(key)) {
|
continue;
|
}
|
String value = (String) params.get(key);
|
if (value != null && !value.isEmpty() && !value.equals("0")) {
|
content.append((i == 0 ? "" : "&") + key + "=" + value);
|
} else {
|
continue;
|
// content.append((i == 0 ? "" : "&") + key + "=");
|
}
|
}
|
String signData = content.toString();
|
if (signData.startsWith("&")) {
|
signData = signData.substring(1);
|
}
|
return signData.trim();
|
}
|
|
public static void SendUnity(String arg, boolean keepAlive) {
|
UnityPlayer.UnitySendMessage(ucaller, uFuncName, arg + "keepAlive=" + keepAlive);
|
}
|
|
public static void SendUnity(String arg) {
|
Log.e("sdfs", "SendUnity--" + arg);
|
UnityPlayer.UnitySendMessage(ucaller, uFuncName, arg);
|
}
|
|
// When Unity player unloaded move task to background
|
@Override
|
public void onUnityPlayerUnloaded() {
|
moveTaskToBack(true);
|
}
|
|
// Callback before Unity player process is killed
|
@Override
|
public void onUnityPlayerQuitted() {
|
}
|
|
@Override
|
protected void onNewIntent(Intent intent) {
|
// To support deep linking, we need to make sure that the client can get access to
|
// the last sent intent. The clients access this through a JNI api that allows them
|
// to get the intent set on launch. To update that after launch we have to manually
|
// replace the intent with the one caught here.
|
setIntent(intent);
|
mUnityPlayer.newIntent(intent);
|
}
|
|
// Quit Unity
|
@Override
|
protected void onDestroy() {
|
mUnityPlayer.destroy();
|
super.onDestroy();
|
}
|
|
// Pause Unity
|
@Override
|
protected void onPause() {
|
super.onPause();
|
mUnityPlayer.pause();
|
AppLog.onPause(this);
|
}
|
|
// Resume Unity
|
@Override
|
protected void onResume() {
|
super.onResume();
|
mUnityPlayer.resume();
|
AppLog.onResume(this);
|
}
|
|
// Low Memory Unity
|
@Override
|
public void onLowMemory() {
|
super.onLowMemory();
|
mUnityPlayer.lowMemory();
|
}
|
|
// Trim Memory Unity
|
@Override
|
public void onTrimMemory(int level) {
|
super.onTrimMemory(level);
|
if (level == TRIM_MEMORY_RUNNING_CRITICAL) {
|
mUnityPlayer.lowMemory();
|
}
|
}
|
|
// This ensures the layout will be correct.
|
@Override
|
public void onConfigurationChanged(Configuration newConfig) {
|
super.onConfigurationChanged(newConfig);
|
mUnityPlayer.configurationChanged(newConfig);
|
}
|
|
// Notify Unity of the focus change.
|
@Override
|
public void onWindowFocusChanged(boolean hasFocus) {
|
super.onWindowFocusChanged(hasFocus);
|
mUnityPlayer.windowFocusChanged(hasFocus);
|
}
|
|
// For some reason the multiple keyevent type is not supported by the ndk.
|
// Force event injection by overriding dispatchKeyEvent().
|
@Override
|
public boolean dispatchKeyEvent(KeyEvent event) {
|
if (event.getAction() == KeyEvent.ACTION_MULTIPLE)
|
return mUnityPlayer.injectEvent(event);
|
return super.dispatchKeyEvent(event);
|
}
|
|
// Pass any events not handled by (unfocused) views straight to UnityPlayer
|
@Override
|
public boolean onKeyUp(int keyCode, KeyEvent event) {
|
return mUnityPlayer.injectEvent(event);
|
}
|
|
@Override
|
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
return mUnityPlayer.injectEvent(event);
|
}
|
|
|
@Override
|
public boolean onTouchEvent(MotionEvent event) {
|
return mUnityPlayer.injectEvent(event);
|
}
|
|
/*API12*/
|
public boolean onGenericMotionEvent(MotionEvent event) {
|
return mUnityPlayer.injectEvent(event);
|
}
|
}
|