ͨϷ˺ϵͳ SDK 
һܺĿ
ͨԣֶ֧ƽ̨PC / ƶ / ˺ϵֻš䡢¼΢ / QQ/Google/Facebook ȣϷĿá
ȫԣ˺֤ݴ䡢Token ֧İȫԡ
չԣֲ֧չܣԡʵ֤˺Ű󶨣䲻ͬϷĶƻ
ԣṩ API ӿڣϷͻ / ˽ɱ֧ͬ / 첽á
ȶԣ쳣񽵼Իƣȷ˺ẓ́¼ / ע / һأɿС
ֲܹƣ
áĲ + չ +  + ߲㡹Ĳܹ߼붨ƻ
plaintext

 㣨Adapter Layerƽ̨䡢Э䡢洢        

 չ㣨Extension Layerܣԡʵ֤ȣ  

 Ĳ㣨Core Layer˺ź̡֤Ȩݹ       

 ߲㣨Utility Layer־ܡ硢쳣    

ϸ
һ߲㣨Utility Layer- ֧
װͨù࣬Ϊϲṩȷ SDK ҿɸá
1. ־ߣLogger
ܣּ־DEBUG/INFO/WARN/ERROR־̨ / ļ / Զϱ־ֻ / Token Ϣ
ӿڣLogger.debug(tag, msg)Logger.error(tag, msg, error)
2. ܹߣCrypto

ԳƼܣAES˺롢ش洢ݡ
ǶԳƼܣRSAм Token֤롣
ϣ㷨SHA-256ιϣ洢ͻ˲洢룩
ǩ㷨HMACӿǩֹ۸ġ
ӿڣCrypto.encryptAES(data, key)Crypto.hashSHA256(data, salt)Crypto.signRequest(params, secret)
3. 繤ߣHttp/HttpClient
ܣ֧ HTTP/HTTPSRESTful/ProtoBuf Э顢ʱԡϵ״̬أӹ豸ϢӦأͳһ
ӿڣHttpClient.get(url, params, config)HttpClient.post(url, data, config)HttpClient.setInterceptor(requestInterceptor, responseInterceptor)
4. 쳣Exception
ͳһ쳣ϵڽ뷽ʹ
ϵͳ쳣NetworkException/StorageException󡢱ش洢ʧܡ
ҵ쳣AuthException/AccountExceptionToken ڡ˺Ŷᡢ
ӿڣSDKException(code, message, cause)ExceptionManager.registerHandler(handler)Զ쳣
5. ùConfig
ܣ SDK ã˵ַʱʱ䡢Կ¼ AppID ȣֱ֧ + Զö̬¡
ӿڣConfig.init(configMap)Config.get(key, defaultValue)
Ĳ㣨Core Layer- ˺ź
װ˺ڵḷ́ SDK ĺ߼ṩ׼ API
1. ˺ģͣAccountModel
ͳһ˺ݽṹֶΣ
javascript

class AccountModel {
  accountId: string; // ȫΨһ˺ IDSDK ڲɣϷ˺Ž
  username: string; // ûѡ
  phone: string; // ֻţ洢
  email: string; // 䣨ѡ
  loginType: LoginType; // ¼ʽPHONE/EMAIL/WX/GOOGLE ȣ
  token: TokenModel; // ֤ Token Ϣ
  bindAccounts: BindAccount[]; // 󶨵ĵ˺б
  status: AccountStatus; // ˺״̬NORMAL/FROZEN/BANNED
  createTime: number; // ʱ
}

// Token ģ֧ͣˢ»ƣ
class TokenModel {
  accessToken: string; //  TokenЧ
  refreshToken: string; // ˢ TokenЧ
  expiresIn: number; // ʱ䣨룩
  tokenType: string; // Token ͣBearer
}
2. ֤ȨAuthService
ĹܣToken ɡ֤ˢ¡٣˺Űȫĺġ
ӿڣ
javascript

class AuthService {
  //  Tokenڲã뷽ֱʹã
  generateToken(account: AccountModel): Promise<TokenModel>;
  // ֤ Token Ч
  verifyToken(token: string): Promise<boolean>;
  // ˢ TokenAccess Token ʱԶã
  refreshToken(refreshToken: string): Promise<TokenModel>;
  //  Token˳¼
  revokeToken(accountId: string): Promise<void>;
  //  Token Ƿڣ+Զ˫У飩
  isTokenExpired(): boolean;
}
3. ˺ẓ́AccountService
װעᡢ¼һ롢˳¼ȺĲ֧ͬ / 첽ã
javascript

class AccountService {
  // 1. עᣨֻ/䣩
  register(params: RegisterParams): Promise<AccountModel>;
  // עֻ/ + ֤ +  + 豸Ϣ

  // 2. ¼෽ʽ
  login(params: LoginParams): Promise<AccountModel>;
  // ¼¼ + ˺ƾֻ֤+֤/+/ code

  // 3. ˳¼ Token + Զ Token
  logout(accountId?: string): Promise<void>;

  // 4. һ루룩
  retrievePassword(params: RetrieveParams): Promise<boolean>;
  // һزֻ/ + ֤ + 

  // 5. ȡǰ¼˺Ϣ
  getCurrentAccount(): AccountModel | null;

  // 6. ˺״̬Ƿ񶳽/
  checkAccountStatus(accountId: string): Promise<AccountStatus>;
}
4. ˺Ű󶨣BindService
ܣֶ֧˺ϵ󶨣ֻŰ΢š GoogleʵһŶǡ
ӿڣ
javascript

class BindService {
  // 󶨵˺
  bindThirdAccount(accountId: string, params: BindParams): Promise<BindAccount>;
  // ˺
  unbindThirdAccount(accountId: string, loginType: LoginType): Promise<boolean>;
  // ȡѰ󶨵˺б
  getBindAccounts(accountId: string): Promise<BindAccount[]>;
}
5. ش洢StorageService
ܣȫ洢˺ϢTokenõݣ䲻ͬƽ̨Ĵ洢ػ / Keychain/SharedPreferences
ȫԣݣToken / 룩ܴ洢֧ݼ / ܡ
ӿڣ
javascript

class StorageService {
  set(key: string, value: any, encrypt = true): Promise<boolean>;
  get(key: string, decrypt = true): Promise<any>;
  remove(key: string): Promise<boolean>;
  clear(): Promise<boolean>; //  SDK 洢
}
չ㣨Extension Layer- 
á + ģʽĲṩչֶ֧ͨƻܣ뷽ɰá
1. ӿڹ淶IPlugin
չʵͳһӿڣ SDK غ͹
javascript

interface IPlugin {
  pluginName: string; // ƣΨһʶ
  init(sdk: GameAccountSDK): Promise<void>; // ʼ SDK ʵɵú
  destroy(): Promise<void>; // 
  getConfig(): PluginConfig; // ȡ
}
2. úĲ
		Ľӿ
֤SMSPlugin	ֻ֧ / ֤뷢֤͡ԽӶŷ / ̣	sendCode(phone/email, type)verifyCode(phone/email, code, type)
ʵ֤RealNamePlugin	Խӹʵ֤ϵͳ֧֤֤飨δðã	realNameAuth(idCard, realName)getAuthStatus(accountId)
ԲAntiAddictionPlugin	ʵ֤δϷʱѽ䲻ͬߣ	checkPlayTime(accountId)limitConsumption(accountId, amount)
֧PaymentBindPlugin	֧˺ţ֧ / ΢֧ / PayPal˺ ID ֧˺	bindPaymentAccount(accountId, paymentType, paymentAccount)
豸󶨲DeviceBindPlugin	˺ŵ¼豸쳣豸¼ȫ	bindDevice(accountId, deviceId)checkDeviceValid(accountId, deviceId)
3. PluginManager
ܣءááжأֽ֧뷽Զ
ӿڣ
javascript

class PluginManager {
  loadPlugin(plugin: IPlugin): Promise<void>; // ز
  enablePlugin(pluginName: string): Promise<void>; // ò
  disablePlugin(pluginName: string): Promise<void>; // ò
  getPlugin(pluginName: string): IPlugin | null; // ȡʵ
}
ģ㣨Adapter Layer- ƽ̨ / Э
ͬƽ̨ͬЭ顢ͬ洢ļ⣬ײ죬ȷĲ߼ͳһ
1. ƽ̨䣨PlatformAdapter
ƽ̨ӿڣԲͬƽ̨Web/Android/iOS/Unity/Unrealʵ־ࣺ
javascript

interface PlatformAdapter {
  platformType: PlatformType; // ƽ̨ͣWEB/ANDROID/IOS/UNITY
  getDeviceInfo(): DeviceInfo; // ȡ豸Ϣ豸 IDϵͳ汾ͣ
  getNetworkType(): NetworkType; // ȡͣWIFI/4G/5G
  requestPermission(permission: string): Promise<boolean>; // Ȩޣ/洢Ȩޣ
}

// ƽ̨ʵʾWebPlatformAdapterAndroidPlatformAdapter 
2. ¼䣨ThirdPartyLoginAdapter
䲻ͬ¼ƽ̨΢ / QQ/Google/Facebookͳһ¼ӿڣ
javascript

interface ThirdPartyLoginAdapter {
  loginType: LoginType; // ¼ͣWX/QQ/GOOGLE
  login(): Promise<ThirdPartyLoginResult>; // õ¼ SDKȨ/code
  getUserInfo(accessToken: string): Promise<ThirdPartyUserInfo>; // ȡûϢ
}

// ʾʵ֣WXLoginAdapterGoogleLoginAdapter
3. 洢䣨StorageAdapter
䲻ͬƽ̨Ĵ洢ͳһ洢ӿڣ
javascript

interface StorageAdapter {
  set(key: string, value: string): Promise<boolean>;
  get(key: string): Promise<string | null>;
  remove(key: string): Promise<boolean>;
  clear(): Promise<boolean>;
}

// ʵࣺWebLocalStorageAdapterlocalStorageAndroidKeychainAdapterKeychain
4. Э䣨ProtocolAdapter
ֲ֧ͬݴЭ飨JSON/ProtoBufͳһл / лӿڣ
javascript

interface ProtocolAdapter {
  serialize(data: any): string | Uint8Array; // л
  deserialize(data: string | Uint8Array, type: string): any; // л
}

// ʵࣺJsonProtocolAdapterProtoBufProtocolAdapter
ġSDK  API ƣ뷽ĵýӿڣ
SDK ṩͳһ GameAccountSDKڲʵϸڣ뷽ֻͨúĹܣ
javascript

class GameAccountSDK {
  // 1. ʼ SDKȵã
  static init(config: SDKInitConfig): Promise<void>;
  // ʼã˵ַƽ̨͡¼áõĲ

  // 2. ˺źĲίи AccountService
  static register(params: RegisterParams): Promise<AccountModel>;
  static login(params: LoginParams): Promise<AccountModel>;
  static logout(): Promise<void>;
  static retrievePassword(params: RetrieveParams): Promise<boolean>;
  static getCurrentAccount(): AccountModel | null;

  // 3. ˺Ű󶨲ίи BindService
  static bindThirdAccount(params: BindParams): Promise<BindAccount>;
  static unbindThirdAccount(loginType: LoginType): Promise<boolean>;

  // 4. ίи PluginManager
  static loadPlugin(plugin: IPlugin): Promise<void>;
  static getPlugin(pluginName: string): IPlugin | null;

  // 5. 빤
  static getConfig(key: string): any;
  static setExceptionHandler(handler: ExceptionHandler): void;
  static enableLog(enable: boolean): void; // /ر־
}
ʾϷͻˣ
javascript

// 1. ʼ SDK
await GameAccountSDK.init({
  baseUrl: "https://account-game.com/api", // ˺ŷ˵ַ
  platformType: "UNITY", // ƽ̨
  timeout: 10000, // 糬ʱʱ
  thirdPartyLoginConfig: {
    WX: { appId: "wx123456" },
    GOOGLE: { clientId: "google-client-id" }
  },
  enabledPlugins: ["RealNamePlugin", "AntiAddictionPlugin"] // õĲ
});

// 2. ֻŵ¼
try {
  const account = await GameAccountSDK.login({
    loginType: "PHONE",
    phone: "13800138000",
    code: "123456" // ֤루ͨ SMSPlugin ȡ
  });
  console.log("¼ɹ˺ ID", account.accountId);
  // Ϸ֤ Token
  gameServer.verifyToken(account.token.accessToken);
} catch (e) {
  if (e instanceof AuthException) {
    console.log("¼ʧܣ", e.message);
    //  Token ڡ˺Ŷ
  }
}

// 3. ΢˺
const bindResult = await GameAccountSDK.bindThirdAccount({
  loginType: "WX"
});
console.log("΢Ű󶨳ɹ", bindResult);
塢ȫ
ݴ䰲ȫнӿڲ HTTPS 䣬в롢֤룩ͨ RSA ܺ䡣
Token ȫAccess Token Ч 2 СʱRefresh Token Ч 7 죩֧Զˢ£Token 洢üܴ洢 Android Keychain/iOS Keychainֹȡ
ӿڷ۸ģ HMAC ǩ + ʱ + 豸 ID֤ǩϷԣֹ󱻴۸ġ
밲ȫͻ˲洢룬ע / ¼ʱͨ SHA-256 ιϣ䣬˴洢ϣֵġ
˺Űȫ֧豸󶨡쳣¼⣨ص¼ѣ˺Ŷ / ƣֶ֧֤ȶ֤
չ
չͨ IPlugin ӿչ¹ܣթƭѡ˺ע޸ĺĴ롣
չƽ̨ƽ̨ PS5/XboxʱʵֶӦ PlatformAdapter  StorageAdapter ɣ߼Ķ
ЭչݴЭ飨 Thriftʱʵ ProtocolAdapter ɣнӿڡ
ö̬£֧ͨ˽ӿڶ̬ SDK ã Token ʱ䡢²ͻ
ߡ뽨
SDK Ϻ˺ŷṩע / ¼ / Token ֤ӿڣʵ SDK Ӧļܡǩݴ洢߼
̣
ͻˣ SDK  ʼ  õ¼ / ע API   Token Ϸˡ
Ϸˣտͻ Token  ˺ŷ˽ӿ֤ Token  ȡ˺ ID Ϸɫ
汾SDK 廯汾Semantic Versioningݾɰ汾 APIƻԸ¡
ԻṩԻãԷ˵ַԵ¼˺ţڽ뷽ԡ
ˡܽ
 SDK ֲͨơչƽ̨䣬ʵˡͨûȫûĺĿ꣬䲻ͬϷͬƽ̨˺ϵͳ󡣽뷽ֻעҵ߼ĵײʵ֣˺ϵͳĿάɱͬʱֹ֧չƽ̨䣬Ϸҵķչ


