Commit 06f6cd4a authored by gaorui's avatar gaorui
Browse files

feat(app):新增海外接入参考demo

parent 54e04a84
// Top-level build file where you can add configuration options common to all sub-projects/modules.
apply from:'config.gradle'
buildscript {
repositories {
maven {
url 'https://sdk.wdyxgames.com/nexus/repository/sdk-public/'
}
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.2'
}
}
allprojects {
repositories {
maven {
url 'https://sdk.wdyxgames.com/nexus/repository/sdk-public/'
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
ext {
//isLibrary
// true app模块为library调试本地依赖库
// false app模块为application 上传apk
isLibrary = false
//true 引入本地依赖库(maven推送时不允许引入本地aar或library类库应为false)
isUseLocalLibs = true
android = [
compileSdkVersion: 29,
minSdkVersion : 21,
targetSdkVersion : 29
]
version = [
fastjson : '1.2.78',
accessNative: '0.1.2.1413-beta2',
crash : '4.2.14',
]
dependencies = [
fastjson : "com.alibaba:fastjson:${version.fastjson}",
accessNative: "com.hoolai.access.platform:access-native:${version.accessNative}",
hoolaiCrash : "com.hoolai.access.crash:hoolai-crash:${version.crash}"
]
testUtils = [
testImplementation : 'junit:junit:4.13.2',
androidTestImplementation: 'androidx.test.ext:junit:1.1.5',
androidTestImplementation: 'androidx.test.espresso:espresso-core:3.5.1'
]
fastsdk = [
groupId: 'com.hoolai.access.open',
name : 'hoolai-core',
version: '1.0.3.11.2-beta'
]
exCrash = [
groupId: 'com.hoolai.access.trace',
name : 'exCrash',
version: '1.0.0.0'
]
hotfix = [
groupId: 'com.hoolai.access.hotfix',
name : 'hotfix',
version: '1.0.0.0'
]
logTag = [
groupId: 'com.hoolai.access.log',
name : 'logTag',
version: '1.0.0.1'
]
uTools = [
groupId: 'com.hoolai.access.open.fastaccess.utils',
name : 'uTools',
version: '1.0.0.0'
]
}
\ No newline at end of file
/build
\ No newline at end of file
plugins {
id 'com.android.application'
}
android {
compileSdkVersion 33
defaultConfig {
applicationId "com.hoolai.oversea.access"
minSdkVersion 23
targetSdkVersion 33
versionCode 24
versionName "1.2.4"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
signingConfigs {
yourkeystore {
keyAlias 'access'
keyPassword 'access123'
storeFile file("${rootProject.projectDir.absolutePath}/keystorefile/access_global.keystore")
storePassword 'access123'
}
}
buildTypes {
debug {
minifyEnabled false //是否混淆
signingConfig signingConfigs.yourkeystore
}
release {
minifyEnabled false //是否混淆
signingConfig signingConfigs.yourkeystore
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
//注意远程依赖库的版本(必须)
implementation 'com.hoolai.access.open:hoolai-core:1.0.0.0-global12'
implementation 'com.hoolai.oversea:hl-oversea-global:1.0.0.0-dev5'
}
\ No newline at end of file
{
"project_info": {
"project_number": "242883477374",
"project_id": "access-f4133",
"storage_bucket": "access-f4133.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:242883477374:android:f7b5a4a9564fcd86e3bd2f",
"android_client_info": {
"package_name": "com.hoolai.oversea.access"
}
},
"oauth_client": [
{
"client_id": "242883477374-p0j6gg8pjibens17rfibf1tsd1d72tkm.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.hoolai.oversea.access",
"certificate_hash": "bc8591140a47250db392865765c4ce7d4e5b8b96"
}
},
{
"client_id": "242883477374-s5a7d489td3s976hcgmcqq1nar7aqrie.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.hoolai.oversea.access",
"certificate_hash": "c6889e4b5808728c7e1d82baed969e8351a2dd4e"
}
},
{
"client_id": "242883477374-7u4f0fvqg2a6jrd7ro6sat6ms2ledtml.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAR9uWzd7yaXb6cDOY1HcDk46JZaEqMhgA"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "242883477374-7u4f0fvqg2a6jrd7ro6sat6ms2ledtml.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
}
],
"configuration_version": "1"
}
\ No newline at end of file
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.hoolai.access.demo">
<!--hoolai sdk permission start-->
<uses-permission android:name="android.permission.INTERNET" />
<!--hoolai sdk permission end-->
<application
android:name="com.hoolai.access.open.fastaccess.HLApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:testOnly="false"
android:hardwareAccelerated="true"
android:supportsRtl="true"
tools:replace="android:allowBackup"
android:usesCleartextTraffic="true">
<activity
android:name="com.hoolai.access.demo.GameActivity"
android:hardwareAccelerated="true"
android:screenOrientation="portrait"
android:launchMode="singleTask"
android:theme="@style/HlAccountTransparent"
android:configChanges="orientation|keyboardHidden|screenSize"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- SDK内部配置(必须) 其中scheme的value值为accesssdk+channelId-->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="accesssdk1"/>
</intent-filter>
</activity>
<!-- demo分享类,无需拷贝 -->
<activity
android:name=".ShareActivity"/>
<!-- Android全面屏支持 可选-->
<meta-data
android:name="android.max_aspect"
android:value="2.35" />
<!-- 华为全面屏支持 可选-->
<meta-data
android:name="android.notch_support"
android:value="true" />
<!--Facebook login and share-->
<!-- facebook share 注意这里的facebook_app_id需要直接替换成参数本身,比如987654321-->
<provider
android:name="com.facebook.FacebookContentProvider"
android:authorities="com.facebook.app.FacebookContentProvider987654321"
android:exported="true" />
<!-- share-->
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />
<meta-data
android:name="com.facebook.sdk.ClientToken"
android:value="@string/facebook_client_token" />
<activity
android:name="com.facebook.CustomTabActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="@string/fb_login_protocol_scheme" />
</intent-filter>
</activity>
<!--Facebook end-->
</application>
</manifest>
\ No newline at end of file
F5OvkhmmnIQ+3ot6Y0R6mlEfM/pduDHyhPPJ4t9FsdEGstVHsBh13LCUjQZoOXb4f+11nTHw2S7gNJ5lVskOypSbR9GuujINqicrCO6ij2hoTNSW6ikKxik/d+a9hE/hEosC2h0loEE1IcAaQlgJ7QYakJIsXeQz2O2GRbVstklmbdnFrenerx5iKDfMA4Z1MS9JVYuwTcQDodrRXDq96mMh/nnDZRqeLSA+yaqrsnOnr6GXACaerHDYMNXcaUOlMiJLYYW7a9mJjBXFNdpq2zMgyyw77DJ29oKk0P5uSIZ9xDcfllnZZV07oJ5ikYwGUvw8JZSy40jXaEArW1G0UQRcUIzY4tSgCmQUe0vGaCittAE7e3/914N2NVAMuN3ZObmwTN+ufpJfdubnnAFqhSjIQse0lJ8twRn24/yCdacDVehke4nISTSm8A5CCFjmEDJeeLas1wvCoWaL2DxThIWJlebZA4GcNS/S0kHXY8FKZPRlPpXDUCdAOBoO3XzWMy4pkpRb7f0xMhQAEucmerX/g8TzilAXRjhGgBZLWbck3VdUDBec3Wb+yKObih3kmqTek0VkyXCRupZNHIlw/Df4yB1SBGaFpiTDFBdYIwfXYdxKTWeJTzXl7MhqcByxXMGIaVHyOKWq56/giUhTbBpcrEp+HztAsQleuP7bn6dnTZy6TFDyhyIQrVE5bNIZhBZxeHBLyfZK3q2wkEKMNb/JAmukaNcLmPGbsVKl3r9Wl1QdqdK3roAJAxz7o3nJ1yjwXPNpeFEiBvEPEX783ELcwcV0t2ojdN1vVMh7UFlralHzgUdEsrhM2dJfRBkrk/IF9BvVq1i5jpm9gIMJhGywWrkxLUG6yBFbBItKUxeYLTaNJKV7MrV+F0t1K1243QECrKQ6jB2tFoPiD5y9/OuOIkoLiX3h+2nQR3Zgh7yi4FvoapH+/zo91LLqmG2KZ+AP8wwEe2GrG04k974fCy4OzQWjw6qfmHN5r4W9nfR9ocQRs2N+M8FeeRDiK5HBI88CVKYdYFANDV63UfL6kCeZQ/+5b8ULbEr3zhx0ALY3daRcUcMmXPlgzWZiJiXm8PxbYPKUfrzzsUcpHqNh2kCTcIEtw4tV0/T11NxUCOMgkiO4QJoFE+DPcbrHkpTPLormp/BjgAlG9Ifjulf1LKD0bTIX6BBHS5XGSx6oUqjtG2oXTzytahtPPZKCR3mEjkPVwbLTgGlK+ZSHNTIGOs+sIthQbh3FHzN97JLHBIPvehJPXFUMuApF8Eju9nWgMiI/NUifyexbZidue0lzyrt9U3BYKSVNYLBAAjLb9fXVplEjhxKYPE+GGpsRHT7hqaSngpDntvsrrDZhF8OTbHCRrgbzpWa4TJw7ni3D8t3Lj8MXHhE6BRMDdPCZP96mK6cuESd19hqSe0N502pX3nVuNhJMUfLXILOEvqii4MWjFyyQBBgcsG1JNYeSMZJwv0walsjO7A7uYGW9yZmtz/u4OSua3g4noQru4IpErdAwkRjUYRSKz5hvrD9Y+wVhcHEObDjDR+V/4BBiBhdq96iqyonZhfrPomjM7ItVqK+Oyb7rF9jiphhdgxgaD+kQ0Hownz2jqAqcsWnugGwLuw8w60rrEx9EHs5ERDA/DmsvfjU/iQXDsiUQWaZws+Yar9S+nbIJ5jyVl8gq6Qx7ug9Xb1Et6RgZ4R+S+sr0nS0=
\ No newline at end of file
[default,zh-Hans]
NETWORK_ERROR = 网络异常
ERROR = core 内通用非ok码
DATA_ILLEGAL = 数据非法
SANDBOX_OR_RESOURCE_EMPTY = 沙盒或资源目录为空
INIT_CFG_ERROR = 初始化配置文件异常
INIT_ACCOUNT_ERROR = 初始化账号列表异常
INIT_PAYMENT_ERROR = 初始化支付系统异常
NOT_START_SYSTEM = 没有启动系统
ALREADY_INIT_SYSTEM = 系统已经初始化
PARSE_RESPONSE_ERROR = 解析响应错误
PARSE_INIT_INFO_ERROR = 解析初始化数据错误
PARSE_LOGIN_INFO_ERROR = 解析登陆信息异常
USERNAME_OR_PASSWORD_EMPTY = 用户名或密码为空
ACCOUNT_ID_OR_CODE_EMPTY = 账户ID或账户码为空
ACCOUNT_ALREADY_BIND_CHANNEL = 账号已经绑定当前渠道
PHONE_OR_CODE_EMPTY = 手机号或验证码为空
PHONE_NUMBER_EMPTY = 手机号码为空
PHONE_FORMAT_ERROR = 手机号码格式错误
QUICK_AUTH_TOKEN_EMPTY = 快速登陆授权Token为空
NOT_SURE_ALL_INTERACTIVE = 未确认所有的对话框交互
NOT_EXIST_SERVICE_DIALOG = 不存在业务对话框
ALREADY_LOGIN = 已经登陆
LOGIN_FAILED = 登录失败
REMOVE_ACCOUNT_ERROR = 删除账号失败
PAYMENT_ERROR = 支付异常
CREATE_LOCAL_ORDER_ERROR = 创建本地订单异常
EXIST_LOCAL_ORDER = 存在本地未完成订单
REMOVE_LOCAL_ORDER_ERROR = 移除本地订单异常
NOT_IN_INIT = 当前不在初始化状态
NOT_IN_LOGIN = 当前不在登陆状态
INIT_SYSTEM_ERROR = 初始化系统异常
INIT_PREFERENCES_ERROR = 初始化用户偏好设置异常
EXIST_VIEW_NOT_CLOSE = 存在未被关闭的view
CURRENT_VIEW_NOT_OPENED = 当前view未被打开
FETCH_DESC_FAILED = 抓取异常描述失败
NOT_EXIST_CHILD_ACCOUNT = 当前小号不存在
NAME_OR_IDENTITY_EMPTY = 姓名或身份证为空
ACCOUNT_INFO_NOT_EXIST = 账号信息不存在
ORDER_INFO_NOT_EXIST = 订单信息不存在
CHANNEL_NOT_SUPPORT_LOGIN = 渠道登陆不支持
NOT_SUPPORT_OPERATOR = 当前操作不支持
PLEASE_RESTART_UPDATE = 更新已完成,请重启
LOCALIZATION_UPDATE_RESTART = 国际化文件已更新,重启生效
CONFIGRATION_UPDATE_RESTART = 配置文件已更新,重启生效
NOT_GENUINE_APP = 非正版应用,请下载正版应用
CANCEL_REAL_NAME = 取消实名认证
UNOFFICIAL_AUTHENTICATION = 非官方认证登录
UNKNOWN = 未知异常
enterGame = 进入游戏
policyPrivacy = 阅读并同意[隐私条款]及[用户协议]
otherLogin = 其它登录方式
realAuth = 实名认证
quickLogin = 快速登录
phoneQuickLogin=本机号码一键登录
pleaseInputPwd = 请输入密码
pleaseInputAccount = 请输入账号
getVerifyCode = 验证码
pleaseInputVerifyCode = 请输入验证码
pleaseInputPhone = 请输入手机号
tip = 提示
authorization = 认证
cancel = 取消
sure = 确定
pleaseInputIdentifyId = 请输入身份证号
pleaseInputName = 请输入姓名
realNameRules = 根据国家新闻出版署《关于防止未成年沉迷网络游戏的通知》,未实名账号不可体验游戏,请尽快完成实名登记
mainEnter = 主号进入
chileEnter = 小号进入
checkedPrivace = 请先勾选并同意相关政策条款再登录游戏
checkPermissionTip = 由于您已拒绝%权限,开启该功能需要打开“设置”>“权限管理”进行授权
realNameError = 您输入的姓名格式不正确
idCardError = 您输入的身份证格式不正确
phoneError = 手机号码格式不正确
vcodeError = 验证码格式不正确
pwdError = 密码格式不正确
getVcodeFailed = 获取验证码失败
bindAccount = 绑定账号
bindAccountTip = 当前渠道账号未绑定游客
guestAccountTip = 当前账号为游客账号,请尽快绑定三方账号,避免账号丢失
guestSwitchTip = 您当前为游客账号,切换账号将丢失当前游客账号的游戏进度
bindingAccountTip = 当前账号已绑定%s账号
accountId = 账号ID
accountCode = 账号码
bindAccountIdPlaceholder = 请输入账号恢复Id
bindAccountCodePlaceholder = 请输入账号恢复码
bindIdCodedescription = 当更换设备时可在切换账号页面中输入当前的恢复Id和恢复码,就可以使用原有账号角色数据继续游戏
unbindIdCodedescription = 如果账号未绑定任何三方账号,可输入账号恢复Id和恢复码用来切换账号
switchAccountTip = 当前登录的渠道账号已绑定其他游客账号,是否进行切换
switchAccount = 切换账号
switchAccountFailture = 切换账号失败
sameAccountTip = 当前账号已登录
loginSuccessTip = 用户%s,登录成功
orderValidate = 订单核验中...
startingPay = 开始购买
purchaseing = 购买中...
[en]
NETWORK_ERROR = Network exception
ERROR = General non-OK code within the core
DATA_ILLEGAL = Illegal data
SANDBOX_OR_RESOURCE_EMPTY = Sandbox or resource directory is empty
INIT_CFG_ERROR = Initialization configuration file exception
INIT_ACCOUNT_ERROR = Initialization account list exception
INIT_PAYMENT_ERROR = Initialization payment system exception
NOT_START_SYSTEM = System not started
ALREADY_INIT_SYSTEM = System already initialized
PARSE_RESPONSE_ERROR = Parse response error
PARSE_INIT_INFO_ERROR = Parse initialization data error
PARSE_LOGIN_INFO_ERROR = Parse login information exception
USERNAME_OR_PASSWORD_EMPTY = Username or password is empty
ACCOUNT_ID_OR_CODE_EMPTY = Account ID or account code is empty
ACCOUNT_ALREADY_BIND_CHANNEL = Account already bound to the current channel
PHONE_OR_CODE_EMPTY = Phone number or verification code is empty
PHONE_NUMBER_EMPTY = Phone number is empty
PHONE_FORMAT_ERROR = Phone number format is incorrect
QUICK_AUTH_TOKEN_EMPTY = Quick login authorization token is empty
NOT_SURE_ALL_INTERACTIVE = Not all dialog interactions are confirmed
NOT_EXIST_SERVICE_DIALOG = Service dialog does not exist
ALREADY_LOGIN = Already logged in
LOGIN_FAILED = Login failed
REMOVE_ACCOUNT_ERROR = Failed to remove account
PAYMENT_ERROR = Payment exception
CREATE_LOCAL_ORDER_ERROR = Exception occurred when creating a local order
EXIST_LOCAL_ORDER = Existing local incomplete order
REMOVE_LOCAL_ORDER_ERROR = Exception occurred when removing a local order
NOT_IN_INIT = Not in initialization state
NOT_IN_LOGIN = Not in login state
INIT_SYSTEM_ERROR = Initialization system exception
INIT_PREFERENCES_ERROR = Initialization user preference settings exception
EXIST_VIEW_NOT_CLOSE = Existing unclosed view
CURRENT_VIEW_NOT_OPENED = Current view not opened
FETCH_DESC_FAILED = Failed to fetch exception description
NOT_EXIST_CHILD_ACCOUNT = Current child account does not exist
NAME_OR_IDENTITY_EMPTY = Name or ID card is empty
ACCOUNT_INFO_NOT_EXIST = Account information does not exist
ORDER_INFO_NOT_EXIST = Order information does not exist
CHANNEL_NOT_SUPPORT_LOGIN = Channel login not supported
NOT_SUPPORT_OPERATOR = Current operation not supported
PLEASE_RESTART_UPDATE = Update completed, please restart
LOCALIZATION_UPDATE_RESTART = Localization files updated, restart required
CONFIGRATION_UPDATE_RESTART = Configuration files updated, restart required
NOT_GENUINE_APP = Non-genuine application, please download the official version
CANCEL_REAL_NAME = Cancel real-name authentication
UNOFFICIAL_AUTHENTICATION = Unofficial authentication login
UNKNOWN = Unknown exception
enterGame = Enter the game
policyPrivacy = Read and agree to [Privacy Policy] and [User Agreement]
otherLogin = Other login methods
realAuth = Real-name authentication
quickLogin = Quick login
phoneQuickLogin = Quick login with caller ID
pleaseInputPwd = Please enter the password
pleaseInputAccount = Please enter the account
getVerifyCode = Verification code
pleaseInputVerifyCode = Please enter the verification code
pleaseInputPhone = Please enter the phone number
tip = Tip
authorization = Authorization
cancel = Cancel
sure = Confirm
pleaseInputIdentifyId = Please enter the ID card number
pleaseInputName = Please enter the name
realNameRules = According to the requirements of the National Press and Publication Administration's "Notice on Preventing Minors from Being Addicted Online Games", unverified accounts cannot experience the game. Please complete real-name authentication as soon as possible.
mainEnter = Enter with main account
childEnter = Enter with child account
checkedPrivace = Please check and agree to the relevant policy terms before logging into the game
checkPermissionTip = As you have denied the % permission, enabling this feature requires opening "Settings" > "Permission Management" for authorization
realNameError = The name you entered is not in the correct format
idCardError = The ID card you entered is not in the correct format
phoneError = Incorrect phone number format
vcodeError = Incorrect verification code format
pwdError = Incorrect password format
getVcodeFailed = Failed to get verification code
bindAccount = Bind account
bindAccountTip = Current channel account is not bound to a guest account
guestAccountTip = Current account is a guest account, please bind to a third-party account as soon as possible in case of loss of account
guestSwitchTip = You are currently a guest account, Switching accounts will lose the game progress of the current guest account
bindingAccountTip = Current account is already bound to %s account
accountId = Account ID
accountCode = Account code
bindAccountIdPlaceholder = Please enter account recovery ID
bindAccountCodePlaceholder = Please enter account recovery code
bindIdCodedescription = When switching devices, you can input the current recovery ID and recovery code on the account switch page to continue using the original account character data
unbindIdCodedescription = If the account is not bound to any third-party account, you can enter the account recovery ID and recovery code to switch accounts
switchAccountTip = The current logged-in channel account is already bound to another guest account. Do you want to switch?
switchAccount = Switch account
switchAccountFailture = Failed to switch account
sameAccountTip = Current account is already logged in
loginSuccessTip = User %s logged in successfully
orderValidate = Order validation in progress...
startingPay = Start purchasing
purchaseing = Purchasing...
[es]
NETWORK_ERROR = Error de red
ERROR = Código no ok universal dentro del core
DATA_ILLEGAL = Datos inválido
SANDBOX_OR_RESOURCE_EMPTY = Entorno de pruebas o directorio de recursos vacío
INIT_CFG_ERROR = Error al inicializar archivo de configuración
INIT_ACCOUNT_ERROR = Error al inicializar lista de cuentas
INIT_PAYMENT_ERROR = Error al inicializar el sistema de pago
NOT_START_SYSTEM = Sistema no iniciado
ALREADY_INIT_SYSTEM = Sistema inicializado
PARSE_RESPONSE_ERROR = Error al analizar respuesta
PARSE_INIT_INFO_ERROR = Error al analizar datos de inicialización
PARSE_LOGIN_INFO_ERROR = Error al analizar información de inicio de sesión
USERNAME_OR_PASSWORD_EMPTY = Nombre d usuario o contraseña vacía
ACCOUNT_ID_OR_CODE_EMPTY = ID de cuenta o código de cuenta vacío
ACCOUNT_ALREADY_BIND_CHANNEL = Cuenta vinculada al canal actual
PHONE_OR_CODE_EMPTY = Número de teléfono móvil o código de verificación vacío
PHONE_NUMBER_EMPTY = Número de teléfono móvil vacío
PHONE_FORMAT_ERROR = Error de formato de teléfono móvil
QUICK_AUTH_TOKEN_EMPTY = Token d autorización de inicio de sesión rápido vacío
NOT_SURE_ALL_INTERACTIVE = Todas las interacciones del cuadro de diálogo no confirmadas
NOT_EXIST_SERVICE_DIALOG = No existe el cuadro de diálogo de negocios
ALREADY_LOGIN = Sesión iniciada
LOGIN_FAILED = Inicio de sesión fallida
REMOVE_ACCOUNT_ERROR = Error al eliminar cuenta
PAYMENT_ERROR = Error de pago
CREATE_LOCAL_ORDER_ERROR = Error al crear pedido local
EXIST_LOCAL_ORDER = Hay pedido local pendiente
CREATE_LOCAL_ORDER_ERROR = Error al retirar pedido local
NOT_IN_INIT = No en estado de inicialización
NOT_IN_LOGIN = No en estado de inicio de sesión
INIT_SYSTEM_ERROR = Error al inicializar el sistema
INIT_PREFERENCES_ERROR = Error al inicializar configuración de preferencias de usuario
EXIST_VIEW_NOT_CLOSE = Hay view no cerrado
CURRENT_VIEW_NOT_OPENED = view actual abierto
FETCH_DESC_FAILED = Error al capturar descripción de anomalía
USER_INFO_NOT_EXIST=La cuenta auxiliar actual no existe
NAME_OR_IDENTITY_EMPTY = Nombre o documento de identificación vacío
ACCOUNT_INFO_NOT_EXIST = La información de cuenta no existe
ORDER_INFO_NOT_EXIST = La información de pedido no existe
CHANNEL_NOT_SUPPORT_LOGIN = No admite inicio de sesión del canal actual
NOT_SUPPORT_OPERATOR = No admite la operación actual
PLEASE_RESTART_UPDATE = Actualización terminada, reinicie
LOCALIZATION_UPDATE_RESTART = Archivo internacional actualizado, reinicie para que surta efecto
CONFIGRATION_UPDATE_RESTART = Archivo de configuración actualizado, reinicie para que surta efecto
NOT_GENUINE_APP = Aplicación no genuina, descargue una genuina
CANCEL_REAL_NAME = Cancelar autentificación de nombre real
UNOFFICIAL_AUTHENTICATION = Inicio de sesión de autenticación no oficial
UNKNOWN = Error desconocido
enterGame = Entrar en el juego
policyPrivacy = Lea y acepte los [Términos de Privacidad] y [Acuerdo de Usuario]
otherLogin = Otros métodos de inicio de sesión
realAuth = Autentificación de nombre real
quickLogin = Inicio de sesión rápido
phoneQuickLogin=Iniciar sesión con un solo clic con el número del teléfono móvil
pleaseInputPwd = Ingrese la contraseña
pleaseInputAccount = Ingrese la cuenta
getVerifyCode = Código de verificación
pleaseInputVerifyCode = Ingrese el código de verificación
pleaseInputPhone = Ingrese el número de teléfono móvil
tip = Aviso
authorization = Autentificación
cancel = Cancelar
sure = Confirmar
pleaseInputIdentifyId = Ingrese el número de identificación
pleaseInputName = Ingrese el nombre
realNameRules = Conforme a los requisitos del "Aviso sobre la Prevención de la Adicción de Menores de Edad a los Juegos en Línea" de la Administración Nacional de Prensa y Publicaciones, no se puede experimentar el juego sin una cuenta de nombre real, complete el registro de nombre real lo antes posible.
mainEnter = Ingresar con cuenta principal
chileEnter = Ingresar con cuenta auxiliar
checkedPrivace = Marque y acepte los términos de la política pertinente antes de iniciar sesión en el juego.
checkPermissionTip = Como ha denegado el permiso%, debe habilitar esta función yendo a "Configuración" > "Gestión de permisos" para autorizar
realNameError = El formato del nombre ingrsado es incorrecto
idCardError = El formato del documento de identificación ingresado es incorrecto
phoneError = El formato del número de teléfono móvil es incorrecto
vcodeError = El formato del código de verificación es incorrecto
pwdError = El formato de la contraseña es incorrecto
getVcodeFailed = Error al obtener código de verificación
bindAccount = Vincular cuenta
bindAccountTip = La cuenta actual del canal no está vinculada a visitado
guestAccountTip = Es la cuenta de visitado, vincule la cuenta de un tercero lo antes posible para evitar la pérdida de la cuenta.
guestSwitchTip = Actualmente eres una cuenta de invitado, Al cambiar de cuenta, se perderá el progreso del juego de la cuenta de invitado actual.
bindAccountTip = La cuenta actual está vinculada a la cuenta %s
accountId = ID de cuenta
accountCode = Número de cuenta
bindAccountIdPlaceholder = Ingrese Id de recuperación de cuenta
bindAccountCodePlaceholder = Ingrese el código de recuperación de la cuenta
bindIdCodedescription = Al cambiar el dispositivo, puede introducir el Id de recuperación actual y el código de recuperación en la página de cambio de cuenta, y continuar el juego con los datos del personaje de la cuenta original.
unbindIdCodedescription = Si la cuenta no está vinculada a ninguna cuenta de tercero, puede introducir el ID de recuperación de la cuenta y el código de recuperación para cambiar la cuenta.
switchAccountTip = La cuenta del canal de inicio de sesión actual está vinculada a otra cuenta de visitado, ¿cambiar?
switchAccount = Cambiar cuenta
switchAccountFailture = Error al cambiar cuenta
sameAccountTip = La cuenta actual se ha iniciado sesión
loginSuccessTip = Usuario %s, inicio de sesión con éxito
orderValidate = Verificando pedido...
startingPay = Comprar
purchaseing = Comprando...
[fr]
NETWORK_ERROR = Anomalie réseau.
ERROR = code non-ok générique dans le core.
DATA_ILLEGAL = Données illégales.
SANDBOX_OR_RESOURCE_EMPTY = Le répertoire du bac à sable ou des ressources est vide
INIT_CFG_ERROR = Erreur de profil d'initialisation.
INIT_ACCOUNT_ERROR = Erreur d'initialisation de la liste des comptes
INIT_PAYMENT_ERROR = Erreur d'initialisation du système de paiement
NOT_START_SYSTEM = Le système n'a pas démarré
ALREADY_INIT_SYSTEM = Le système est déjà initialisé
PARSE_RESPONSE_ERROR = Erreur d'analyse de la réponse.
PARSE_INIT_INFO_ERROR = Erreur d'analyse des données d'initialisation.
PARSE_LOGIN_INFO_ERROR = Erreur d'analyse des informations de connexion.
USERNAME_OR_PASSWORD_EMPTY = Le nom d'utilisateur ou le mot de passe est vide.
ACCOUNT_ID_OR_CODE_EMPTY = ID de compte ou code de compte vide
ACCOUNT_ALREADY_BIND_CHANNEL = Le compte a été lié au canal actuel
PHONE_OR_CODE_EMPTY = Le numéro de téléphone mobile ou le code de vérification est vide.
PHONE_NUMBER_EMPTY = Le numéro de téléphone mobile est vide
PHONE_FORMAT_ERROR = Le format du numéro de téléphone mobile est incorrect.
QUICK_AUTH_TOKEN_EMPTY = Le token d'autorisation de connexion rapide est vide.
NOT_SURE_ALL_INTERACTIVE = Toutes les interactions de la boîte de dialogue ne sont pas confirmées.
NOT_EXIST_SERVICE_DIALOG = Aucun dialogue commercial n'existe.
ALREADY_LOGIN = Déjà connecté.
LOGIN_FAILED = Échec de la connexion.
REMOVE_ACCOUNT_ERROR = Échec de la suppression du compte.
PAYMENT_ERROR = Erreur de paiement
CREATE_LOCAL_ORDER_ERROR = Erreur de création d'une commande locale.
EXIST_LOCAL_ORDER = Il y a une commande locale non remplie.
REMOVE_LOCAL_ORDER_ERROR = Supprimer une erreur de commande locale.
NOT_IN_INIT = Actuellement pas dans l'état d'initialisation.
NOT_IN_LOGIN = Pas encore connecté.
INIT_SYSTEM_ERROR = Erreur du système d'initialisation.
INIT_PREFERENCES_ERROR = Erreur d'initialisation des préférences de l'utilisateur.
EXIST_VIEW_NOT_CLOSE = Un view n'a pas été fermé.
CURRENT_VIEW_NOT_OPENED = Le view actuel n'est pas ouvert.
FETCH_DESC_FAILED = Échec de la saisie de la description des erreurs.
NOT_EXIST_CHILD_ACCOUNT = Le compte enfant n'existe pas.
NAME_OR_IDENTITY_EMPTY = Le nom ou ID est vide.
ACCOUNT_INFO_NOT_EXIST = L'information sur le compte n'existe pas.
USER_INFO_NOT_EXIST = L'information sur la commande n'existe pas.
CHANNEL_NOT_SUPPORT_LOGIN = La connexion au canal est non supportée.
NOT_SUPPORT_OPERATOR = L'opération actuelle n'est pas supportée.
PLEASE_RESTART_UPDATE = La mise à jour est terminée, veuillez redémarrer.
LOCALIZATION_UPDATE_RESTART = Le fichier d'internationalisation a été mis à jour, veuillez redémarrer pour qu'il prenne effet.
CONFIGRATION_UPDATE_RESTART = Le fichier de configuration a été mis à jour, veuillez redémarrer pour qu'il prenne effet.
NOT_GENUINE_APP = Application non authentique, veuillez télécharger l'application authentique.
CANCEL_REAL_NAME = Annuler la vérification de l'identité.
UNOFFICIAL_AUTHENTICATION = Connexion d'authentification non officielle.
UNKNOWN = Erreur inconnue.
enterGame = Entrer dans le jeu.
policyPrivacy = Lire et accepter [Politique de confidentialité] et [Accord de l'utilisateur].
otherLogin = Autres méthodes de connexion.
realAuth = La vérification de l'identité.
quickLogin = Connexion rapide.
phoneQuickLogin=Connexion en un clic avec le numéro local.
pleaseInputPwd = Veuillez saisir le mot de passe.
pleaseInputAccount = Veuillez saisir votre numéro de compte.
getVerifyCode = Code de vérification.
pleaseInputVerifyCode = Veuillez saisir le code de vérification.
pleaseInputPhone = Veuillez saisir le numéro de téléphone portable.
tip = Notice
authorization = Authentification
cancel = Annuler
sure = Confirmer
pleaseInputIdentifyId = Veuillez saisir le numéro d'identification.
pleaseInputName = Veuillez saisir votre nom.
realNameRules = Selon l’avis de l'Administration générale de la presse et des publications sur la prévention de l'accès des mineurs aux jeux en ligne, vous ne pouvez pas participer au jeu sans un compte à nom réel. Veuillez donc compléter l'enregistrement à nom réel dès que possible.
mainEnter = Entrée du compte main
chileEnter = Entrée du compte enfant
checkedPrivace = Veuillez cocher et accepter les conditions d'utilisation avant de vous connecter au jeu.
checkPermissionTip = Vous avez refusé la permission %, pour ouvrir cette fonction, vous devez ouvrir "Paramètres" > "Gestion des permissions" pour l'autorisation.
realNameError = Le nom que vous avez saisi n'est pas au bon format.
idCardError = Vous avez saisi un numéro d'identification incorrect.
phoneError = Le format de votre numéro de téléphone portable n'est pas correct.
vcodeError = Le code de vérification n'est pas dans le bon format.
pwdError = Le format du mot de passe est incorrect.
getVcodeFailed = Le code de vérification n'a pas été obtenu.
bindAccount = Lier le compte
bindAccountTip = Le compte de canal actuel n'est pas lié au visiteur.
guestAccountTip = Le compte actuel est un compte visiteur, veuillez lier un compte tiers dès que possible pour éviter une perte de compte.
guestSwitchTip = Vous êtes actuellement un compte invité. Changer de compte entraînera la perte de la progression du jeu du compte invité actuel.
bindingAccountTip = Le compte courant est lié au compte %s.
accountId = ID du compte
accountCode = Code du compte
bindAccountIdPlaceholder = Veuillez saisir le numéro de compte de recouvrement.
bindAccountIdPlaceholder = Veuillez saisir le code de recouvrement.
bindIdCodedescription = Lorsque vous changez d'appareil, vous pouvez saisir le numéro de compte et le code de recouvrement, puis vous pouvez utiliser les données de personnage du compte d'origine pour continuer le jeu.
unbindIdCodedescription = Si le compte n'est pas lié à un compte tiers, vous pouvez saisir le numéro de compte et le code de recouvrement pour changer de compte.
switchAccountTip = Le compte du canal actuellement connecté est lié à d'autres comptes visiteurs. Voulez-vous changer de compte ?
switchAccount = Changer de compte
switchAccountFailture = Échec du changement de compte
sameAccountTip = Le compte actuel est connecté
loginSuccessTip = Utilisateur%s, connexion réussie
orderValidate = Vérification de la commande en cours...
startingPay = Commencer l'achat
purchaseing = Acheter...
[it]
NETWORK_ERROR = Errore di rete
ERROR = In core cidice usato non ok
DATA_ILLEGAL = Dati non corretti
SANDBOX_OR_RESOURCE_EMPTY = Sandbox o elenco risorse vuoto
INIT_CFG_ERROR = Errore documenti impostazioni di inizializzazione
INIT_ACCOUNT_ERROR = Errore lista account inizializzazione
INIT_PAYMENT_ERROR = Errore di sistema pagamento inizializzazione
NOT_START_SYSTEM = Non è presente il sistema di avviamento
ALREADY_INIT_SYSTEM = Inizializzazione sistema avvenuta
PARSE_RESPONSE_ERROR = Errore risposta analisi
PARSE_INIT_INFO_ERROR = Errore dati inizializzazione analisi
PARSE_LOGIN_INFO_ERROR = Errore info accesso analisi
USERNAME_OR_PASSWORD_EMPTY = Nome utente o password vuoti
ACCOUNT_ID_OR_CODE_EMPTY = ID account o codice account vuoti
ACCOUNT_ALREADY_BIND_CHANNEL = Account già associato al canale attuale
PHONE_OR_CODE_EMPTY = Numero di telefono o codice di verifica vuoti
PHONE_NUMBER_EMPTY = Numero di telefono vuoto
PHONE_FORMAT_ERROR = Formato numero di telefono errato
QUICK_AUTH_TOKEN_EMPTY = Token permesso access rapido vuoto
NOT_SURE_ALL_INTERACTIVE = Non ancora confermata l’interazione di tutti i dialoghi
NOT_EXIST_SERVICE_DIALOG = Dialogo del servizio inesistente
ALREADY_LOGIN = Accesso già effettuato
LOGIN_FAILED = Accesso fallito
REMOVE_ACCOUNT_ERROR = Eliminazione account fallita
PAYMENT_ERROR = Errore pagamento
CREATE_LOCAL_ORDER_ERROR = Errore creazione ordine locale
EXIST_LOCAL_ORDER = È presente un ordine locale non completato
REMOVE_LOCAL_ORDER_ERROR = Errore rimozione ordine locale
NOT_IN_INIT = Al momento non si è nello stato di inizializzazione
NOT_IN_LOGIN = Al momento non si è nell stato di accesso
INIT_SYSTEM_ERROR = Errore inizializzazione di sistema
INIT_PREFERENCES_ERROR = Errore impostazioni preferite inizializzazione utente
EXIST_VIEW_NOT_CLOSE = È presente view non chiusa
CURRENT_VIEW_NOT_OPENED = View attuale non aperta
FETCH_DESC_FAILED = Fallimento descrizione errore fetch
NOT_EXIST_CHILD_ACCOUNT = Account secondario attuale inesistente
NAME_OR_IDENTITY_EMPTY = Nome o identità vuoti
ACCOUNT_NOT_EXIST=Info account inesistenti
ORDER_INFO_NOT_EXIST = Info ordine inesistenti
CHANNEL_NOT_SUPPORT_LOGIN = Accesso canale non supportato
NOT_SUPPORT_OPERATOR = Operazione attuale non supportata
PLEASE_RESTART_UPDATE = Aggiornamento completato, riavviare
LOCALIZATION_UPDATE_RESTART = Documento di localizzazione aggiornato, riavvia per attivare
CONFIGRATION_UPDATE_RESTART = Documento impostazioni aggiornato, riavvia per attivare
NOT_GENUINE_APP = Versione app non originale, scaricare versione ufficiale
CANCEL_REAL_NAME = Annulla verifica identità取消实名认证
UNOFFICIAL_AUTHENTICATION = Accesso non ufficiale
UNKNOWN = Errore sconosciuto
enterGame = Entra nel gioco
policyPrivacy = Leggi e approva [normativa sulla privacy] e [contratto utente]
otherLogin = Altri metodi di accesso
realAuth = Verifica identità
quickLogin = Accessi rapido
phoneQuickLogin=Accesso rapido con questo numero
pleaseInputPwd = Inserire password
pleaseInputAccount = Inserire account
getVerifyCode = Codice di verifica
pleaseInputVerifyCode = Inserire codice di verifica
pleaseInputPhone = Inserire numero di telefono
tip = Consiglio
authorization = Autorizzazione
cancel = Annulla
sure = Conferma
pleaseInputIdentifyId = Inserire numero documento d’identità
pleaseInputName = Inserire nome
realNameRules = In base alle nuove informazioni pubblicate in “Avviso sulla prevenzione della dipendenza da giochi on-line dei minori”, gli account con identità non identificata non possono accedere al gioco, registra la tua identità al più presto.
mainEnter = Entrata account principale
chileEnter = Emtrata account secondario
checkedPrivace = Metti la spunta per approvare le normative necessarie per accedere al gioco
checkPermissionTip = Dato che hai negato il permesso di %, per attivare questa funzione è necessario aprire “impostazioni”>“gestione permessi” e attivare il permesso
realNameError = Formato nome e cognome inseriti errato
idCardError = Il formato di documento d’identità che hai inserito non è corretto
phoneError = Formato numero di telefono errato
vcodeError = Formato codice di verifca errato
pwdError = Formato password errato
getVcodeFailed = Ottenimento codice di verifica fallito
bindAccount = Associa account
bindAccountTip = L’ospite non ha associato l’account canale attuale
guestAccountTip = L’account attuale è un account ospite, associa al più presto un account di terze parti, così da evitare la perdita dell’account
guestSwitchTip = Attualmente sei un account ospite. Cambiare account farà perdere i progressi di gioco dell'account ospite corrente.
bindingAccountTip = Account attuale già associato all’account %s
accountId = ID account
accountCode = Codice account
bindAccountIdPlaceholder = Inserire Id di recupero account
bindAccountCodePlaceholder = Inserire codice di recupero account
bindIdCodedescription = Quando si cambia dispositivo si possono inserire i seguenti id di recupero e codice di recupero nella pagina di cambio account, così si possono utilizzare i dati del personaggio dell’account originale e proseguire il gioco
unbindIdCodedescription = Se l’account non ha account di terze parti associate, si possono inserire l’id di recupero e il codice di recupero per passare all’account
switchAccountTip = L’account del canale dell’accesso attuale è già associato a un’altro account di gioco, effettuare il cambio?
switchAccount = Cambio account
switchAccountFailture = Cambio account fallito
sameAccountTip = Accesso account attuale effettuato
loginSuccessTip = Utente %s, accesso riuscito
orderValidate = Verifica ordine in corso...
startingPay = Inizia acquisto
purchaseing = Acquisto in corso...
[ja]
NETWORK_ERROR = ネットワークエラー
ERROR = core 内共通の非okコード
DATA_ILLEGAL = 不適切なデータ
SANDBOX_OR_RESOURCE_EMPTY = サンドボックスまたはリソースディレクトリが空です
INIT_CFG_ERROR = 構成ファイルの初期化にエラーが発生しました
INIT_ACCOUNT_ERROR = アカウントリストの初期化にエラーが発生しました
INIT_PAYMENT_ERROR =支払いシステムの初期化にエラーが発生しました
NOT_START_SYSTEM = システムが起動していません
ALREADY_INIT_SYSTEM = システムは初期化されました
PARSE_RESPONSE_ERROR = レスポンスの解析にエラーが発生しました
PARSE_INIT_INFO_ERROR = 初期化データの解析にエラーが発生しました
PARSE_LOGIN_INFO_ERROR = ログイン情報の解析にエラーが発生しました
USERNAME_OR_PASSWORD_EMPTY = ユーザー名またはパスワードが空です
ACCOUNT_ID_OR_CODE_EMPTY = アカウントIDまたアカウントコードが空です
ACCOUNT_ALREADY_BIND_CHANNEL = アカウントは既にこのチャンネルと連携されています
PHONE_OR_CODE_EMPTY = 携帯番号または認証コードが空です
PHONE_NUMBER_EMPTY = 携帯番号が空です
PHONE_FORMAT_ERROR = 携帯番号の形式が間違っています
QUICK_AUTH_TOKEN_EMPTY = クイックログインの認証Tokenが空です
NOT_SURE_ALL_INTERACTIVE = すべてのダイアログインタラクションは確認されていません
NOT_EXIST_SERVICE_DIALOG = 業務ダイアログは存在しません
ALREADY_LOGIN = ログイン済み
LOGIN_FAILED = ログイン失敗
REMOVE_ACCOUNT_ERROR = アカウントの削除に失敗しました
PAYMENT_ERROR = 支払いエラー
CREATE_LOCAL_ORDER_ERROR = ローカル注文の作成時にエラーが発生しました
EXIST_LOCAL_ORDER = 未完了のローカル注文があります
REMOVE_LOCAL_ORDER_ERROR = ローカル注文の削除時にエラーが発生しました
NOT_IN_INIT = 現在は初期化状態ではありません
NOT_IN_LOGIN = 現在はログイン状態ではありません
INIT_SYSTEM_ERROR = システムの初期化にエラーが発生しました
INIT_PREFERENCES_ERROR = ユーザーパーソナライズ設定の初期化にエラーが発生しました
EXIST_VIEW_NOT_CLOSE = 閉じられていないビューがあります
CURRENT_VIEW_NOT_OPENED = このビューは開いていません
FETCH_DESC_FAILED = エラーの説明の取得に失敗しました
NOT_EXIST_CHILD_ACCOUNT = このサブアカウントが存在しません
NAME_OR_IDENTITY_EMPTY = 名前または身分証明書が空です
ACCOUNT_INFO_NOT_EXIST = アカウント情報が存在しません
ORDER_INFO_NOT_EXIST = 注文情報が存在しません
CHANNEL_NOT_SUPPORT_LOGIN = チャンネルログインがサポートされていません
NOT_SUPPORT_OPERATOR = この操作がサポートされていません
PLEASE_RESTART_UPDATE = アップデートが完了しました。再起動してください
LOCALIZATION_UPDATE_RESTART = 国際化ファイルが更新されました。再起動すると有効になります。
CONFIGRATION_UPDATE_RESTART = 構成ファイルが更新されました。再起動すると有効になります。
NOT_GENUINE_APP = 正規版のアプリではありません。正規版をダウンロードしてください
CANCEL_REAL_NAME = 実名認証をキャンセルします
UNOFFICIAL_AUTHENTICATION = 非公式認証ログイン
UNKNOWN = 未知の異常
enterGame = ゲームに入る
policyPrivacy = [プライバシーポリシー]と[利用規約]を読んで同意します
otherLogin = その他のログイン方法
realAuth = 実名認証
quickLogin = クイックログイン
phoneQuickLogin=この携帯番号でクイックログイン
pleaseInputPwd = パスワードを入力してください
pleaseInputAccount = アカウントを入力してください
getVerifyCode = 認証コード
pleaseInputVerifyCode = 認証コードを入力してください
pleaseInputPhone = 携帯番号を入力してください
tip = チップス
authorization = 認証
cancel = キャンセル
sure = 確認
pleaseInputIdentifyId = 身分証明書番号を入力してください
pleaseInputName = 名前を入力してください
realNameRules = 国家新聞出版署の『未成年者のオンラインゲーム依存防止に関する通知』の要件に従って、実名認証されていないアカウントはゲームを体験することができません。速やかに実名登録を完了してください
mainEnter = メインアカウントで入る
chileEnter = サブアカウントで入る
checkedPrivace = ゲームにログインする前に、関連するポリシー条項を確認し、同意してください。
checkPermissionTip = %権限を拒否したため、この機能を有効にするには、「設定」 > 「権限管理」 を開いて許可する必要があります
realNameError = 入力した名前の形式が正しくありません
idCardError = 入力した身分証明書の形式が正しくありません
phoneError = 携帯番号の形式が正しくありません
vcodeError = 認証コードの形式が正しくありません
pwdError = パスワードの形式が正しくありません
getVcodeFailed = 認証コードの取得に失敗しました
bindAccount = アカウント連携
bindAccountTip = このチャンネルアカウントはゲストと連携されていません
guestAccountTip = 現在のアカウントはゲストアカウントです。アカウントを失わないよう、できるだけ早く第三者アカウントに連携してください
guestSwitchTip = あなたは現在ゲスト アカウントです。アカウントを切り替えると、現在のゲスト アカウントのゲームの進行状況が失われます
bindingAccountTip = 現在のアカウントは%sアカウントに連携されています
accountId = アカウントID
accountCode = アカウントコード
bindAccountIdPlaceholder = アカウント回復IDを入力してください
bindAccountCodePlaceholder = アカウント回復コードを入力してください
bindIdCodedescription = デバイスを変更した場合、アカウント切り替え画面で現在の回復IDと回復コードを入力すると、元のアカウントのキャラクターデータでゲームを継続することができます。
unbindIdCodedescription = アカウントが第三者アカウントに連携されていない場合は、アカウント回復IDと回復コードを入力することでアカウントを切り替えることができます。
switchAccountTip = 現在ログインしているチャンネルアカウントは別のゲストアカウントに連携されています。切り替えますか?
switchAccount = アカウント切り替え
switchAccountFailture = アカウントの切り替えに失敗しました
sameAccountTip = このアカウントはログインしています
loginSuccessTip = ユーザー%s、ログインに成功しました
orderValidate = 注文確認中...
startingPay = 購入を開始します
purchaseing = 購入中...
[pt]
NETWORK_ERROR = Erro de rede
ERROR = Código de erro geral das funções principais
DATA_ILLEGAL = Dados inválidos
SANDBOX_OR_RESOURCE_EMPTY = Não há recursos na pasta de recursos
INIT_CFG_ERROR = Ocorreu um erro ao inicializar o arquivo de configuração
INIT_ACCOUNT_ERROR = Ocorreu um erro ao inicializar a lista de contas
INIT_PAYMENT_ERROR = Ocorreu um erro ao inicializar o sistema de pagamento
NOT_START_SYSTEM = O sistema não foi inicializado
ALREADY_INIT_SYSTEM = O sistema foi inicializado
PARSE_RESPONSE_ERROR = Ocorre um erro ao analisar a resposta
PARSE_INIT_INFO_ERROR = Ocorre um erro ao analisar dados inicializados
PARSE_LOGIN_INFO_ERROR = Falha ao analisar as informações de login
USERNAME_OR_PASSWORD_EMPTY = Nome do usuário e senha devem ser preenchidos
ACCOUNT_ID_OR_CODE_EMPTY = ID da conta e código da conta devem ser preenchidos
ACCOUNT_ALREADY_BIND_CHANNEL = A conta já está vinculada ao canal atual
PHONE_OR_CODE_EMPTY = Número do celular e código de verificação devem ser preenchidos
PHONE_NUMBER_EMPTY = Número do celular deve ser preenchido
PHONE_FORMAT_ERROR = Formato do número de celular incorreto
QUICK_AUTH_TOKEN_EMPTY = A identidade do jogador não pode ser autorizado com bug de Token
NOT_SURE_ALL_INTERACTIVE = Todos os diálogos ainda não foram confirmados
NOT_EXIST_SERVICE_DIALOG = Não há diálogos de negócios
ALREADY_LOGIN = Já está logado
LOGIN_FAILED = Falha no login
REMOVE_ACCOUNT_ERROR = Falha ao excluir a conta
PAYMENT_ERROR = Erro de pagamento
CREATE_LOCAL_ORDER_ERROR = Criação do pedido local falhou
EXIST_LOCAL_ORDER = Há um pedido local pendente
REMOVE_LOCAL_ORDER_ERROR = Falha ao remover o pedido local
NOT_IN_INIT = O sistema ainda não foi inicializado
NOT_IN_LOGIN = Você ainda não fez login
INIT_SYSTEM_ERROR = Ocorreu um erro ao inicializar o sistema
INIT_PREFERENCES_ERROR = Ocorreu um erro ao inicializar a configuração de preferências do usuário
EXIST_VIEW_NOT_CLOSE = Tem View pendente
CURRENT_VIEW_NOT_OPENED = View Atual ainda não foi aberto
FETCH_DESC_FAILED = Falha ao obter as informações do erro
NOT_EXIST_CHILD_ACCOUNT = A conta secundária não existe
NAME_OR_IDENTITY_EMPTY = O nome e o número do RG devem ser preenchidos
ACCOUNT_INFO_NOT_EXIST = As informações da conta não foram encontradas
ORDER_INFO_NOT_EXIST = As informações do pedido não foram encontradas
CHANNEL_NOT_SUPPORT_LOGIN = Este canal não suporta login
NOT_SUPPORT_OPERATOR = A operação atual não é suportada
PLEASE_RESTART_UPDATE = A atualização foi concluída. Reinicie o aplicativo
LOCALIZATION_UPDATE_RESTART = Atualização do arquivo de internacionalização concluída. Reinicie o aplicativo para ver as alterações
CONFIGRATION_UPDATE_RESTART = Atualização do arquivo de configuração concluída. Reinicie o aplicativo para ver as alterações
NOT_GENUINE_APP = Aplicativo duvidoso, baixe aplicativo de confiança
CANCEL_REAL_NAME = Cancelar a verificação do nome real
UNOFFICIAL_AUTHENTICATION = Método de login inválido
UNKNOWN = Erro desconhecido
enterGame = Entrar
policyPrivacy = Li e aceito a [Política de Privacidade] e o [Contrato do Usuário]
otherLogin = Outros métodos de login
realAuth = Verificação do nome real
quickLogin = Login rápido
phoneQuickLogin=Login rápido com número do celular local
pleaseInputPwd = Insira a senha
pleaseInputAccount = Insira a conta
getVerifyCode = Código de verificação
pleaseInputVerifyCode = Insira o código de verificação
pleaseInputPhone = Insira o número do celular
tip = Dica
authorization = Autorização
cancel = Cancelar
sure = Confirmar
pleaseInputIdentifyId = Insira seu número do RG
pleaseInputName = Insira seu nome
realNameRules = Conforme os requisitos do “Aviso para Impedir que Menores de Idade Joguem Online” publicado pela Administração Nacional de Imprensa e Publicação, os usuários não verificados não podem experimentar esse jogo. Por favor, conclua o registro do nome real o mais rápido possível
mainEnter = Entrar com conta principal
chileEnter = Entrar com conta secundária
checkedPrivace = Marque e aceite os termos da política antes de entrar no jogo
checkPermissionTip = Como você não autorizou a permissão de %, para ativar essa função, é necessário abrir “Configurações” > “Gerenciamento de permissões” e autorizar
realNameError = Você inseriu o nome em um formato incorreto
idCardError = Você inseriu o número do RG em um formato incorreto
phoneError = Formato do número de celular incorreto
vcodeError = Formato do código de verificação incorreto
pwdError = Formato da senha incorreto
getVcodeFailed = Falha ao obter o código de verificação
bindAccount = Vincular conta
bindAccountTip = A conta atual deste canal ainda não vincula um convidado
guestAccountTip = A conta atual é uma conta de convidado. Vincule a conta de terceiros o mais rápido possível para evitar a perda da conta
guestSwitchTip = Você é atualmente uma conta de convidado. Ao trocar de conta, você perderá o progresso do jogo da conta de convidado atual
bindingAccountTip = A conta atual já está vinculada à conta %s
accountId = ID da conta
accountCode = Código da conta
bindAccountIdPlaceholder = Insira o ID de recuperação da conta
bindAccountCodePlaceholder = Insira o código de recuperação da conta
bindIdCodedescription = Se você trocar de dispositivo, não se preocupe! Basta inserir o ID de recuperação e o código de recuperação atuais na página de troca de conta. Assim, você poderá continuar jogando com os dados de personagem da conta original
unbindIdCodedescription = Se você não estiver vinculado a nenhuma conta de terceiros, você poderá inserir o ID de recuperação da conta e o código de recuperação para trocar de conta
switchAccountTip = A conta deste canal que está usando agora já está vinculada a outra conta de convidado. Deseja trocar de conta?
switchAccount = Trocar de conta
switchAccountFailture = Falha ao trocar de conta
sameAccountTip = A conta atual está logada
loginSuccessTip = Usuário %s fez login com sucesso
orderValidate = Verificando pedido...
startingPay = Começar a comprar
purchaseing = Comprando...
[system]
TIMESTAMPT = 1701326040
background_color_view = DFE0E5
button_background_default_color = 008CD6
button_background_unable_color = CFCFD1
button_background_pressed_color = 009FEC
button_background_color = 008CD6
button_border_color = D80020
label_font_color = D80020
Nylq2KwJc9zyQHHorv7V1k9OQlVmZRldJ7pYyX3SBh0n80IkSOshbI1GpwwpPnfN1pIzICsQe8SNodtNxtOFo+5+2GwSop3KQ9L8huM6Q+uLvbmV77hS+lHX9l3c4qqsgUqC/V8hTAWVFMNCCwjYZX5FZsPrsjsaimPJita5FoC5Xakapt5bP9fEf/t5eetVFxQRTCaU1kJvbaZc0lyP9IDEabEAgbecqx6ldQQxfucII8s2L/61ZosgzoGRuCizpNTyRotsLyeRJCDZup1MK8k2NqwngizHcndiAPi71cUSdoZN8HSCkruPvlIpVPE9hNE/1dx65rQSCuabsvKeHA==
\ No newline at end of file
package com.hoolai.access.demo;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
import com.hoolai.access.open.fastaccess.channel.FastSdk;
import com.hoolai.access.open.fastaccess.channel.request.EventType;
import com.hoolai.access.open.fastaccess.channel.request.GoodsInfo;
import com.hoolai.access.open.fastaccess.channel.request.PayParams;
import com.hoolai.access.open.fastaccess.channel.request.PlayerInfo;
import com.hoolai.access.open.fastaccess.channel.request.ShareParams;
import com.hoolai.access.open.fastaccess.channel.request.ShareType;
import com.hoolai.access.open.fastaccess.channel.result.InitResult;
import com.hoolai.access.open.fastaccess.channel.result.LoginResult;
import com.hoolai.access.open.fastaccess.interf.HLAccountListener;
import com.hoolai.access.open.fastaccess.interf.HLPaymentListener;
import com.hoolai.access.open.fastaccess.interf.HLSystemListener;
import com.hoolai.access.open.fastaccess.utils.Logger;
import com.hoolai.access.open.fastaccess.utils.SPUtils;
import com.hoolai.access.open.fastaccess.utils.ToastUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/**
* Hoolai_sdk接入说明
* 接入文档地址 http://support.hoolai.com/docs/#/android/complete
*/
public class GameActivity extends Activity {
private TextView contentTv;
private LoginResult userResponse;
private Button initBtn, loginBtn, logoutBtn;
private EditText et_tv, et_rpc, et_pwd, et_itemId;
private EditText et_ip_host, et_ip_pwd, et_ip_port;
private boolean isInit;
private int height;
private int width;
private boolean isEnterGame;
private StringBuffer sb = new StringBuffer();
private ScrollView scrollView;
private LinearLayout linearLayout;
private static final String ITME_ID = "itemId";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// AccessConfigMgr.cfgInstance().StartSocket("10.1.3.29", 3333, "aaa");
// Logger.i("--------------------------------------------StartSocket");
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
setContentView(R.layout.activity_main);
contentTv = findViewById(R.id.main_tv);
et_tv = findViewById(R.id.et_main);
et_rpc = findViewById(R.id.et_rpc);
et_pwd = findViewById(R.id.et_pwd);
et_itemId = findViewById(R.id.et_itemId);
et_ip_host = findViewById(R.id.et_ip_host);
et_ip_port = findViewById(R.id.et_ip_port);
et_ip_pwd = findViewById(R.id.et_ip_pwd);
scrollView = findViewById(R.id.main_scrollview);
linearLayout = findViewById(R.id.main_linearlayout);
initBtn = findViewById(R.id.init);
loginBtn = findViewById(R.id.login);
logoutBtn = findViewById(R.id.logout);
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics);
this.width = displayMetrics.widthPixels;
this.height = displayMetrics.heightPixels;
hoolaiSdkInit();
et_itemId.setText("1");
String itemId = SPUtils.getInstance().getStringValue(ITME_ID);
if (!TextUtils.isEmpty(itemId)) {
et_itemId.setText(itemId);
}
// FastSdk.checkPermission(this, "android.permission.READ_EXTERNAL_STORAGE", true);
// FastSdk.checkPermission(this, "android.permission.READ_EXTERNAL_STORAGE", true);
// FastSdk.checkPermissions(this, new String[] {"android.permission.READ_EXTERNAL_STORAGE", "android.permission.READ_PHONE_STATE"
// , "android.permission.CAMERA", "android.permission.ACCESS_FINE_LOCATION"}, true);
}
@Override
public Resources.Theme getTheme() {
Resources.Theme theme = super.getTheme();
theme.applyStyle(android.R.style.Theme_NoTitleBar_Fullscreen, true);
return theme;
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
FastSdk.onSaveInstanceState(outState);
}
@Override
protected void onStart() {
super.onStart();
FastSdk.onStart(this);
}
@Override
protected void onResume() {
Logger.i("游戏页面onResume");
super.onResume();
FastSdk.onResume(this);
}
@Override
protected void onStop() {
super.onStop();
FastSdk.onStop(this);
}
@Override
protected void onPause() {
super.onPause();
FastSdk.onPause(this);
}
@Override
protected void onRestart() {
super.onRestart();
Logger.i("游戏页面onRestart");
FastSdk.onRestart(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
FastSdk.onDestroy(this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
FastSdk.onNewIntent(intent);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
FastSdk.onActivityResult(this, requestCode, resultCode, data);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
FastSdk.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
FastSdk.onConfigurationChanged(this, newConfig, getResources());
ViewGroup.LayoutParams layoutParams = getWindow().getDecorView().getLayoutParams();
if (layoutParams.width >= layoutParams.height) {
layoutParams.width = width;
layoutParams.height = height;
} else {
layoutParams.width = height;
layoutParams.height = width;
}
getWindow().onConfigurationChanged(newConfig);
}
@Override
public void onBackPressed() {
// super.onBackPressed();
//如果游戏需要捕获返回事件,请在这里做逻辑判断调用FastSdk.onBackPressed();
FastSdk.onBackPressed();
exit();
}
/**
* hoolai sdk初始化,必须放到onCreate中,并且在主线程中调用
*/
private void hoolaiSdkInit() {
FastSdk.hlSystemListener = new HLSystemListener() {
@Override
public void onInitSuccess(InitResult result) {
initBtn.setVisibility(View.GONE);
loginBtn.setVisibility(View.VISIBLE);
isInit = true;
if (!contentTv.getText().toString().contains("登录成功")) {
sb.append("初始化成功!初始化结果:\n" + result.toString());
refreshView();
}
LogUtil.i("Hoolai sdk初始化成功:");
Toast.makeText(GameActivity.this, "初始化成功!", Toast.LENGTH_SHORT).show();
// FastSdk.checkPermission(GameActivity.this, "android.permission.BLUETOOTH_SCAN");
}
@Override
public void onInitFailed(String reason) {
LogUtil.i("Hoolai sdk初始化失败:" + reason);
Toast.makeText(GameActivity.this, "初始化失败:" + reason, Toast.LENGTH_SHORT).show();
//sdk初始化失败
//注意初始化未成功不得调用sdk任何接口,游戏可在这里做提示或者重新初始化操作
}
@Override
public void onCustomExit() {
Toast.makeText(GameActivity.this, "弹出游戏的退出界面", Toast.LENGTH_SHORT).show();
/**
* demo 只作为参考,游戏应该根据自己所需逻辑实现
* 渠道没有退出二次确认框
* 根据需要加二次确认框
*/
// 渠道不存在退出界面,如百度移动游戏等,此时需在此处弹出游戏退出确认界面,否则会出现渠道审核不通过情况
// 游戏实现自己的退出界面 ,实现退出逻辑,请勿直接照搬demo
// 根据需要加二次确认框
new AlertDialog.Builder(GameActivity.this)
.setTitle("游戏退出弹窗")
.setMessage("我是游戏的弹窗界面哦")
.setNegativeButton("取消", null)
.setPositiveButton("确定", (dialog, which) -> onExitSuccess(""))
.setCancelable(false).show();
}
@Override
public void onExitSuccess(String result) {
//当前渠道如果有退出界面,触发该回调
//处理退出逻辑,
moveTaskToBack(true);
finish();
//建议游戏按照下面代码逻辑,退出程序兼容性最好,否则可能会造成oppop、vivo等渠道退出不彻底,导致再次点击启动应用黑屏。
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
android.os.Process.killProcess(android.os.Process.myPid());
}
@Override
public void onUpdate(String data) {
}
};
FastSdk.hlAccountListener = new HLAccountListener() {
@Override
public void onRefreshUser(LoginResult result) {
LogUtil.i("Hoolai refreshUser:" + result.toString());
Toast.makeText(GameActivity.this, "小号切换成功" + result.getNickName(), Toast.LENGTH_SHORT).show();
}
@Override
public void onLoginSuccess(LoginResult result) {
loginBtn.setVisibility(View.GONE);
logoutBtn.setVisibility(View.VISIBLE);
GameActivity.this.userResponse = result;
sb.append("登录成功:" + result.toString());
refreshView();
}
@Override
public void onLoginFailed(String reason) {
LogUtil.i("登录失败:" + reason);
runOnUiThread(() -> {
sb.append(reason);
refreshView();
});
}
@Override
public void onLogout(Object... var1) {
sb.append("已登出");
logoutBtn.setVisibility(View.GONE);
loginBtn.setVisibility(View.VISIBLE);
refreshView();
}
};
FastSdk.hlPaymentListener = new HLPaymentListener() {
@Override
public void onPaySuccess(String result) {
sb.append("支付成功:" + result);
refreshView();
}
@Override
public void onPayFailed(String reason) {
LogUtil.i("支付失败:" + reason);
sb.append("支付失败:" + reason);
refreshView();
}
@Override
public void onQuerySuccess(final List<GoodsInfo> list) {
LogUtil.i("商品信息获取成功:" + list.toString());
runOnUiThread(new Runnable() {
@Override
public void run() {
if (list.size() == 0) {
Toast.makeText(GameActivity.this, "商品信息获取为空", Toast.LENGTH_SHORT).show();
return;
}
//游戏获取到商品信息之后可以展示到游戏商品界面
//游戏需要有一套默认的商品信息配置,如果通过此接口获取不到商品信息时使用默认的商品配置
//---------------以下是demo代码-----------------------------------------------
Context context;
AlertDialog.Builder builder = new AlertDialog.Builder(GameActivity.this);
ListView listView = new ListView(GameActivity.this);
listView.setAdapter(new ArrayAdapter(GameActivity.this, android.R.layout.simple_list_item_1, android.R.id.text1, list));
listView.setOnItemClickListener((parent, view1, position, id) -> {
GoodsInfo payInfo = list.get(position);
// 游戏支付时需要传的参数 示例
PayParams payParams = new PayParams();
payParams.setItemId(payInfo.getItemId());
payParams.setItemName(payInfo.getItemName());
payParams.setAmount(Integer.parseInt(payInfo.getItemPrice()));
payParams.setCount(Integer.valueOf(payInfo.getItemCount()));
//扩展信息,回调时原样返回,因为各渠道回调参数限制不一致。回调参数暂时只支持长度50。callBackInfo中不要使用这些符号:“|”、“=”、“+”、“/”。
payParams.setCallbackInfo("支付扩展信息,游戏透传参数" + UUID.randomUUID().toString().replace("-", ""));
// payParams.addExtendParam("isSupportThirdPayment", "true");//是否支持google之外的三方支付
// payParams.addExtendParam("payType", "1");// 1 钱包(默认此类型) 2 点卡,短代类支付,需要通过FastSdk.supportShortterm查询
// payParams.addExtendParam("currency", payInfo.getShowTag());//币种
FastSdk.pay(GameActivity.this, payParams);
});
builder.setView(listView);
builder.show();
}
});
}
};
FastSdk.onCreate(GameActivity.this);
}
//=========================以下是模拟游戏调用,都是必接接口========================================
/**
* 登录调用,必接
*
* @param view
*/
public void onClickLogin(View view) {
// SystemClock.sleep(50000);
if (isInit) {
FastSdk.login();
} else {
ToastUtils.toast("请初始化完成后操作");
}
}
/**
* 登出,必接
*/
public void onClickInit(View view) {
hoolaiSdkInit();
}
public void onClickLogout(View view) {
if (isInit) {
FastSdk.logout();
if (userResponse != null) {
} else {
Toast.makeText(GameActivity.this, "请先登录", Toast.LENGTH_SHORT).show();
}
}
}
/**
* 海外版sdk需要通过此接口获取商品信息进行UI展示,商品信息会根据区域自动转化币种
* 上国内渠道此接口可不接入,海外版必接
*/
public void getPriceInfo(View view) {
if (userResponse == null) {
Toast.makeText(this, "请先登录!", Toast.LENGTH_SHORT).show();
return;
}
if (TextUtils.isEmpty(userResponse.getUid() + "")) {
Toast.makeText(this, "请先登录!", Toast.LENGTH_SHORT).show();
return;
}
FastSdk.queryGoodsInfo();
// FastSdk.checkPermissions(GameActivity.this, new String[]{"android.permission.BLUETOOTH_SCAN"});
}
/**
* 支付调用,必接
*/
public void doPay(View view) {
pay(1);
}
public void customPay(View view) {
String amount = String.valueOf(et_tv.getText());
if (TextUtils.isEmpty(amount)) {
Toast.makeText(GameActivity.this, "输入金额不能为空", Toast.LENGTH_SHORT).show();
return;
}
pay(Integer.valueOf(amount));
}
private void pay(int amount) {
if (userResponse == null) {
Toast.makeText(this, "请先登录!", Toast.LENGTH_SHORT).show();
return;
}
if (!isEnterGame) {
Toast.makeText(this, "请先进服!", Toast.LENGTH_SHORT).show();
return;
}
PayParams payParams = new PayParams();
payParams.setItemId(et_itemId.getText().toString());//商品,要保证游戏内各个商品唯一(可以不传)
//ItemName要求:这些特殊符号都不要有: + % # “ & / ? $ ^ *:) \ < > , |。否则会造成某些渠道支付报错如:华为渠道
payParams.setItemName("钻石");//购买物品名称
payParams.setAmount(amount);//金额(分)
payParams.setCount(1);//购买商品数量,例如50元宝,传值50
payParams.setCallbackInfo("callbackInfo");//扩展信息,回调时原样返回,因为各渠道回调参数限制不一致。回调参数暂时只支持长度50。callBackInfo中不要使用这些符号:“|”、“=”、“+”、“/”。
payParams.setCurrency("CNY");//国内可不传或CNY
payParams.setNotifyUrl("https://sdkhub-test.webapp.163.com/api/v1/test/notify/aebfw63ihmaaaaab");
// payParams.setNotifyUrl("");
// Map<String, String> map = new HashMap<>();
// map.put("key", "");
// payParams.setOpt(map);
FastSdk.pay(GameActivity.this, payParams);
SPUtils.getInstance().setStringValue(ITME_ID, et_itemId.getText().toString());
//支付服务端回调地址,请在产品信息里配置。
}
/**
* 退出接口调用,必接
*/
public void onExit(View view) {
// AudioTrackUtils.getInstance().stopPlay();
exit();
}
public void exit() {
FastSdk.exit();
}
/**
* 账号管理,aab接入会展示账号管理界面
*
* @param view
*/
public void onClickAccountmanage(View view) { // 管理账号接口
FastSdk.openAccountCenter(this);
}
/**
* 数据上报,必接
*
* @param view
*/
public void createRole(View view) {
if (userResponse == null) {
Toast.makeText(this, "请先登录!", Toast.LENGTH_SHORT).show();
return;
}
Logger.i("上报创角");
sendPlayRoleInfo(EventType.CreateRole);
sendPlayRoleInfo(EventType.CustomerAction);
}
public void enterSever(View view) {
if (userResponse == null) {
Toast.makeText(this, "请先登录!", Toast.LENGTH_SHORT).show();
return;
}
Logger.i("上报进服");
isEnterGame = true;
sendPlayRoleInfo(EventType.EnterServer);
}
public void levelUp(View view) {
if (userResponse == null) {
Toast.makeText(this, "请先登录!", Toast.LENGTH_SHORT).show();
return;
}
Logger.i("上报升级");
sendPlayRoleInfo(EventType.LevelUp);
}
public void share(View view) {
startActivity(new Intent(this, ShareActivity.class));
}
private void sendPlayRoleInfo(EventType eventType) {
PlayerInfo playerInfo = new PlayerInfo();
playerInfo.setRoleId("1235761");//角色唯一标识id
playerInfo.setRoleName("昵称2");
playerInfo.setRoleLevel("11");
playerInfo.setZoneId("100");
playerInfo.setZoneName("华东大区");
playerInfo.setServerId("100");
playerInfo.setServerName("大唐战机");
playerInfo.setBalance("66");
playerInfo.setVip("1");
playerInfo.setPartyName("帮派名称");
playerInfo.setClassField("aaaa");
playerInfo.setExtendAction("aaaatest");
playerInfo.setExtra("a:arm,b:bom");//扩展信息,格式:key:value,key:value
playerInfo.setPhylum("1");
//对于sdk海外版自定义事件报送,需要在传ACTION的时候做如下处理,中文版可以忽略
//userExtData.put(UserExtDataKeys.ACTION, "oversea_custom");
//userExtData.put(UserExtDataKeys.CUSTOM_KEY,"海外版自定义事件名称");
sb.append(eventType.getDesc() + ":\n" + playerInfo);
refreshView();
FastSdk.report(eventType, playerInfo);
}
public void setProxy(View v) {
// settingProxy();
}
private void settingProxy() {
String pwd = et_ip_pwd.getText().toString();
String host = et_ip_host.getText().toString();
String port = et_ip_port.getText().toString();
if (!TextUtils.isEmpty(host) && !TextUtils.isEmpty(pwd) && !TextUtils.isEmpty(port)) {
// FastSdk.setProxy(1, pwd, host, port);
ToastUtils.toast("设置代理:" + host + ",pwd:" + pwd + ",prot:" + port);
hoolaiSdkInit();
} else {
hoolaiSdkInit();
}
}
public void setRpc(View v) {
String pwd = et_pwd.getText().toString();
String host = et_rpc.getText().toString();
if (TextUtils.isEmpty(host) || TextUtils.isEmpty(pwd)) {
ToastUtils.toast("ip或密码不可为空");
return;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
}
return super.onKeyDown(keyCode, event);
}
private void refreshView() {
sb.append("\n");
contentTv.setText(sb);
Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
if (scrollView == null || linearLayout == null) {
return;
}
//end要显示的位置,可以根据自己的需要来计算
int end = (linearLayout.getMeasuredHeight() - scrollView.getHeight());
if (end < 0) {
end = 0;
}
scrollView.scrollTo(0, end);
}
}, 500);//延迟500ms启动
}
public void openService(View view) {
FastSdk.openService(this);
}
public void gameInfoData(View view) {
String action = "game_xxx";
Map<String, Object> hashMap = new HashMap<>();
hashMap.put("xxx", 123);
hashMap.put("ooo", "321");
FastSdk.gameDataReport(action, hashMap);
}
}
\ No newline at end of file
package com.hoolai.access.demo;
import android.app.Application;
import android.content.Context;
import android.content.res.Configuration;
import com.hoolai.access.open.fastaccess.channel.FastSdk;
public class GameApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//如使用了Multidex 需要指定 hoolaisdk相关代码到主dex中
//-keep com.hoolai.**
FastSdk.onApplicationCreate(this);
}
@Override
public void onTerminate() {
super.onTerminate();
FastSdk.onTerminate(this);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
FastSdk.onConfigurationChanged(this, newConfig);
}
@Override
protected void attachBaseContext(Context context) {
super.attachBaseContext(context);
FastSdk.attachBaseContext(this, context);
}
}
package com.hoolai.access.demo;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class JavaTest {
public static void main(String[] args) {
String message = "欢迎使用《重构官网》,在您使用前,请认真阅读《用户服务协议》和《隐私政策》《隐私政策2》《隐私政策3》,以了解我们的服";
message = message.replace(message.substring(0, message.indexOf(",") + 1), "");
Pattern pattern = Pattern.compile("《(.*?)》");
Matcher matcher = pattern.matcher(message);
try{
String[] strs = {"11", "22", "33"};
int i = 0;
while(matcher.find()){
System.out.println(matcher.group());
System.out.println(strs[i]);
System.out.println("==========");
i++;
}
}catch (Exception e){
e.printStackTrace();
}
// String[] temp = message.split("《");
// for(int i = 0; i < temp.length; i++){
// if (i > 0 && i < temp.length){
// String str = temp[i].split("》")[0];
// System.out.println(str);
// System.out.println(message.substring(message.indexOf(str) - 1, message.indexOf(str) + str.length() + 1));
// System.out.println("==========");
// }
// }
// System.out.println(b.length);
}
}
package com.hoolai.access.demo;
import android.util.Log;
public class LogUtil {
private static final String TAG = "HL_DEMO";
public static void i(String str){
Log.i(TAG, str);
}
}
package com.hoolai.access.demo;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import com.hoolai.access.open.fastaccess.channel.FastSdk;
import com.hoolai.access.open.fastaccess.channel.request.GoodsInfo;
import com.hoolai.access.open.fastaccess.channel.request.PayParams;
import com.hoolai.access.open.fastaccess.utils.ToastUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public class ProductUtils {
public static void showProducts(Activity activity, List<GoodsInfo> list){
if (list.size() == 0) {
ToastUtils.toast("商品信息获取为空");
return;
}
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
ListView listView = new ListView(activity);
listView.setAdapter(new ArrayAdapter(activity, android.R.layout.simple_list_item_1, android.R.id.text1, list));
listView.setOnItemClickListener((parent, view1, position, id) -> {
GoodsInfo payInfo = list.get(position);
// 游戏支付时需要传的参数 示例
PayParams payParams = new PayParams();
payParams.setItemId(payInfo.getItemId());
payParams.setItemName(payInfo.getItemName());
payParams.setAmount(Integer.parseInt(payInfo.getItemPrice()));
payParams.setCount(Integer.valueOf(payInfo.getItemCount()));
//扩展信息,回调时原样返回,因为各渠道回调参数限制不一致。回调参数暂时只支持长度50。callBackInfo中不要使用这些符号:“|”、“=”、“+”、“/”。
payParams.setCallbackInfo("支付扩展信息,游戏透传参数"+ UUID.randomUUID().toString().replace("-",""));
Map<String, String> map = new HashMap<>();
map.put("isSupportThirdPayment", "true");//是否支持google之外的三方支付
map.put("payType", "1");// 1 钱包(默认此类型) 2 点卡,短代类支付,需要通过FastSdk.supportShortterm查询
map.put("currency", payInfo.getShowTag());//币种
payParams.setOpt(map);
FastSdk.pay(activity, payParams);
});
builder.setView(listView);
builder.show();
}
}
package com.hoolai.access.demo;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Toast;
import com.hoolai.access.open.fastaccess.channel.FastSdk;
import com.hoolai.access.open.fastaccess.channel.request.ShareParams;
import com.hoolai.access.open.fastaccess.channel.request.ShareType;
import com.hoolai.access.open.fastaccess.interf.HLShareListener;
import com.hoolai.access.open.fastaccess.utils.Logger;
import com.hoolai.access.open.fastaccess.utils.ToastUtils;
/**
* @author gaor
* @date 2023/12/14 20:22
* @description 分享
*/
public class ShareActivity extends Activity {
private static int REQUEST_PHOTO_PICKER_SINGLE_SELECT = 1008611;
private static int REQUEST_VIDEO_PICKER_SINGLE_SELECT = 1008612;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_share);
FastSdk.hlShareListener = new HLShareListener() {
@Override
public void onShareSuccess() {
ToastUtils.showToast("分享成功", Toast.LENGTH_SHORT);
}
@Override
public void onShareFailed(String s) {
ToastUtils.showToast("分享失败:" + s, Toast.LENGTH_SHORT);
}
};
}
public void shareText(View view) {
ShareParams shareParams = new ShareParams();
shareParams.setTitle("测试链接");
shareParams.setContent("https://www.baidu.com");
FastSdk.share(ShareType.SYSTEM, ShareType.ChildType.SYSTEM_TEXT, shareParams);
}
public void shareVideo(View view) {
Intent intent = new Intent(MediaStore.ACTION_PICK_IMAGES);
startActivityForResult(intent, REQUEST_VIDEO_PICKER_SINGLE_SELECT);
}
public void sharePhoto(View view) {
Intent intent = new Intent(MediaStore.ACTION_PICK_IMAGES);
startActivityForResult(intent, REQUEST_PHOTO_PICKER_SINGLE_SELECT);
}
public void fbShareText(View view) {
ShareParams shareParams = new ShareParams();
shareParams.setTitle("测试链接");
shareParams.setShareUrl("https://www.baidu.com");
FastSdk.share(ShareType.FACEBOOK, ShareType.ChildType.FACEBOOK_LINK, shareParams);
}
public void fbPhotoShare(View view) {
Intent intent = new Intent(MediaStore.ACTION_PICK_IMAGES);
startActivityForResult(intent, REQUEST_PHOTO_PICKER_SINGLE_SELECT);
}
public void fbShareVideo(View view) {
Intent intent = new Intent(MediaStore.ACTION_PICK_IMAGES);
startActivityForResult(intent, REQUEST_VIDEO_PICKER_SINGLE_SELECT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data==null){
return;
}
Uri data1 = data.getData();
if (data1==null){
return;
}
Logger.i("shareActivity onActivityResult:" + data1.toString());
if (requestCode == REQUEST_PHOTO_PICKER_SINGLE_SELECT) {
/*
//系统图片分享
ShareParams shareParams = new ShareParams();
shareParams.setTitle("系统图片分享");
shareParams.setPicPath(data1.toString());
FastSdk.share(ShareType.SYSTEM, ShareType.ChildType.SYSTEM_IMG, shareParams);*/
//Facebook图片分享
ShareParams shareParams = new ShareParams();
shareParams.setTitle("泰裤辣");
shareParams.setPicPath(data1.toString());
FastSdk.share(ShareType.FACEBOOK, ShareType.ChildType.FACEBOOK_IMG, shareParams);
} else if (requestCode == REQUEST_VIDEO_PICKER_SINGLE_SELECT) {
/*
//系统视频分享
ShareParams shareParams = new ShareParams();
shareParams.setTitle("系统视频分享");
shareParams.setPicPath(data1.toString());
FastSdk.share(ShareType.SYSTEM, ShareType.ChildType.SYSTEM_FILE, shareParams);*/
//Facebook视频分享
ShareParams shareParams = new ShareParams();
shareParams.setTitle("泰裤辣");
shareParams.setPicPath(data1.toString());
FastSdk.share(ShareType.FACEBOOK, ShareType.ChildType.FACEBOOK_VIDEO, shareParams);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_btn_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/shape_btn" android:state_enabled="true" />
<item android:drawable="@drawable/shape_btn" android:state_pressed="false" />
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="6dp" />
<solid android:color="#7f333333" />
</shape>
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment