Files
test/Assets/Tech3C/Plugins/Android/Tech3CUnityBridge.java
T
2026-02-02 19:21:45 +07:00

185 lines
6.2 KiB
Java

package vn.tech3c.sdk.unity;
import android.util.Log;
import vn.tech3c.sdk.auth.callback.OnAuthCallback;
import vn.tech3c.sdk.auth.controller.Tech3CIdController;
import vn.tech3c.sdk.auth.entities.enums.LoginType;
import vn.tech3c.sdk.auth.exceptions.Tech3CIdException;
import com.unity3d.player.UnityPlayer;
/**
* Unity Bridge for Tech3C SDK
* This class receives callbacks from Tech3C SDK and sends them to Unity via UnitySendMessage
*/
public class Tech3CUnityBridge implements OnAuthCallback {
private static final String TAG = "Tech3CUnityBridge";
private static final String UNITY_GAME_OBJECT = "Tech3CSDKBridge";
private static Tech3CUnityBridge instance;
private OnUnityAuthCallback unityAuthCallback;
private OnUnityLogoutCallback unityLogoutCallback;
private OnUnityUserInfoCallback unityUserInfoCallback;
// Singleton
public static synchronized Tech3CUnityBridge getInstance() {
if (instance == null) {
instance = new Tech3CUnityBridge();
}
return instance;
}
// Interfaces for Unity callbacks
public interface OnUnityAuthCallback {
void onAuthSuccess(String userId, String password, String accessToken, String refreshToken, LoginType loginType, long expiryTime);
void onAuthCancelled();
void onAuthError(int errorCode, String errorMessage);
}
public interface OnUnityLogoutCallback {
void onLogoutSuccess();
void onLogoutError(int errorCode, String errorMessage);
}
public interface OnUnityUserInfoCallback {
void onUserInfoReceived(String userId, String username, String email, String phone);
void onUserInfoCancelled();
void onUserInfoError(int errorCode, String errorMessage);
}
// Set callbacks
public void setUnityAuthCallback(OnUnityAuthCallback callback) {
this.unityAuthCallback = callback;
}
public void setUnityLogoutCallback(OnUnityLogoutCallback callback) {
this.unityLogoutCallback = callback;
}
public void setUnityUserInfoCallback(OnUnityUserInfoCallback callback) {
this.unityUserInfoCallback = callback;
}
// Send message to Unity
private void sendToUnity(String methodName, String message) {
try {
UnityPlayer.UnitySendMessage(UNITY_GAME_OBJECT, methodName, message);
Log.d(TAG, "Sent to Unity: " + methodName + " - " + message);
} catch (Exception e) {
Log.e(TAG, "Error sending to Unity: " + e.getMessage());
}
}
// ========== OnAuthCallback Implementation ==========
@Override
public void onLoginSuccess(String userId, String password, String accessToken, String refreshToken, LoginType loginType, long expiryTime) {
Log.d(TAG, "onLoginSuccess: " + userId);
// Send to Unity
String message = userId + "|" + password + "|" + accessToken + "|" + refreshToken + "|" + loginType.name() + "|" + expiryTime;
sendToUnity("OnAuthSuccess", message);
// Also call Unity callback if set
if (unityAuthCallback != null) {
unityAuthCallback.onAuthSuccess(userId, password, accessToken, refreshToken, loginType, expiryTime);
}
}
@Override
public void onRegisterSuccess(String accessToken, String refreshToken, String userId, long expiryTime) {
Log.d(TAG, "onRegisterSuccess: " + userId);
// Treat register success as auth success (password is empty for register)
String message = userId + "|" + "" + "|" + accessToken + "|" + refreshToken + "|REGISTER|" + expiryTime;
sendToUnity("OnAuthSuccess", message);
if (unityAuthCallback != null) {
unityAuthCallback.onAuthSuccess(userId, "", accessToken, refreshToken, LoginType.ACCOUNT, expiryTime);
}
}
@Override
public void onAuthCancelled() {
Log.d(TAG, "onAuthCancelled");
sendToUnity("OnAuthCancelled", "");
if (unityAuthCallback != null) {
unityAuthCallback.onAuthCancelled();
}
}
@Override
public void onAuthScreenOpened() {
Log.d(TAG, "onAuthScreenOpened");
// Optional: Send to Unity if needed
}
@Override
public void onError(Tech3CIdException exception) {
Log.d(TAG, "onError: " + exception.getMessage());
String message = exception.getErrorCode() + "|" + exception.getMessage();
sendToUnity("OnAuthError", message);
if (unityAuthCallback != null) {
unityAuthCallback.onAuthError(exception.getErrorCode(), exception.getMessage());
}
}
// ========== Additional Callback Methods ==========
public void onLogoutSuccess() {
Log.d(TAG, "onLogoutSuccess");
sendToUnity("OnLogoutSuccess", "");
if (unityLogoutCallback != null) {
unityLogoutCallback.onLogoutSuccess();
}
}
public void onLogoutError(int errorCode, String errorMessage) {
Log.d(TAG, "onLogoutError: " + errorMessage);
String message = errorCode + "|" + errorMessage;
sendToUnity("OnLogoutError", message);
if (unityLogoutCallback != null) {
unityLogoutCallback.onLogoutError(errorCode, errorMessage);
}
}
public void onUserInfoReceived(String userId, String username, String email, String phone) {
Log.d(TAG, "onUserInfoReceived: " + userId);
String message = userId + "|" + username + "|" + email + "|" + phone;
sendToUnity("OnUserInfoReceived", message);
if (unityUserInfoCallback != null) {
unityUserInfoCallback.onUserInfoReceived(userId, username, email, phone);
}
}
public void onUserInfoCancelled() {
Log.d(TAG, "onUserInfoCancelled");
sendToUnity("OnUserInfoCancelled", "");
if (unityUserInfoCallback != null) {
unityUserInfoCallback.onUserInfoCancelled();
}
}
public void onUserInfoError(int errorCode, String errorMessage) {
Log.d(TAG, "onUserInfoError: " + errorMessage);
String message = errorCode + "|" + errorMessage;
sendToUnity("OnUserInfoError", message);
if (unityUserInfoCallback != null) {
unityUserInfoCallback.onUserInfoError(errorCode, errorMessage);
}
}
}