2024-11-11DzoSDK Android Native v.2.22
Copy DzoSDK-release.aar to folder {Project}/app/libs
Copy SDKConfig.json to folder {Project}/app/src/main/assets
Add to dependencies of build.grade(Module.app)
dependencies {
…
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
// --- DzoSDK Library --- //
//noinspection GradleCompatible
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:2.0.4'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'com.android.volley:volley:1.2.1'
implementation group: 'com.google.code.gson', name: 'gson', version: '2.10'
implementation 'com.facebook.android:facebook-android-sdk:17.0.0'
implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'com.google.android.gms:play-services-auth:21.2.0'
implementation "com.android.billingclient:billing:7.1.0"
implementation "com.android.installreferrer:installreferrer:2.2"
implementation 'com.appsflyer:af-android-sdk:6.5.0'
implementation 'com.google.android.play:review:2.0.1' // => Rating App
implementation platform('com.google.firebase:firebase-bom:29.0.3')
implementation 'com.google.firebase:firebase-auth'
implementation 'com.google.firebase:firebase-analytics'
implementation 'com.google.firebase:firebase-messaging'
implementation 'com.google.firebase:firebase-dynamic-links'
// ------------------------- //
…
}
apply plugin: 'com.google.gms.google-services' // --- Add this at bottom ---
Add to dependencies of build.grade(Project)
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.2.0-alpha06'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
classpath 'com.google.gms:google-services:4.3.15' // google-services plugin
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
Add a Firebase configuration file (Important)
Move config file (google-services.json) into the module (app-level) directory of your app ({Project}/app/)
Config file strings.xml (as example) in folder {Project}/app/src/main/res/values
<resources>
…
<string name="app_name">{YOUR_APPNAME}</string> <!-- Ex: Demo App -->
<string name="useDefaultButtonDzoHome">true</string>
<string name="useDefaultTag18Plus">true</string>
<string name="useDefaultBroadcast">true</string>
<string name="facebook_app_id">{YOUR FB APP ID}</string> <!-- Ex: 123456 -->
<string name="fb_login_protocol_scheme">fb{YOUR FB APP ID}</string> <!-- Ex: fb123456 -->
<string name="facebook_client_token">{YOUR FB CLIENT TOKEN}</string> <!-- Ex: 123456 -->
<string name="fb_ContentProvider">com.facebook.app.FacebookContentProvider{YOUR FB APP ID}</string> <!-- Ex: com.facebook.app.FacebookContentProvider123456 -->
<string name="google_web_client_id">{YOUR GOOGLE WEB CLIENT ID}</string>
<string name="useAppsFlyerTracking">true</string>
<string name="AppsFlyer_DevKey">{AppsFlyer_DevKey}</string>
<string name="useFirebase">true</string>
<string name="useFirebaseTracking">true</string>
<string name="firebase_default_notification_channel_id">{BundleID}.urgent</string> <!-- Ex: com.test.app.urgent -->
...
</resources>
Add code into function onActivityResult() in your Activity.
Example:
…
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(DzoSDK.TAG, "onActivityResult >>> requestCode:" + requestCode + " | resultCode: " + resultCode);
super.onActivityResult(requestCode, resultCode, data);
…
DzoSDK.GetInstance().OnActivityResult(requestCode, resultCode, data); // <== Add this code
}
…
In Function onCreate() of Activity add this code to Init DzoSDK:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_login);
// ------ Init DzoSDK ------- //
if(!DzoSDK.GetInstance().IsConnected()){
DzoSDK.GetInstance().Init(this, new DzoInitCallback() {
@Override
public void OnInitSuccess() {
// --- Init Successful --- //
// … Your code … //
DzoSDK.GetInstance().Login(); // After Init SDK Successful, you can call Login.
}
@Override
public void OnLoginSuccess() { // Callback Login Successful, change NEXT SCENE
// --- Login Successful --- //
// => Init IAP Products and Dzovi Products
// … Your code … //
}
@Override
public void OnLogoutSuccess() { // Callback Logout Successful, you need to change LoginActivity
// --- Logout Successful --- //
// … Your code … //
}
@Override
public void OnDebugLog(boolean _isLogError, String _tag, String _msg) {
If (_isLogError){
Log.e(_tag, _msg);
}else {
Log.d(_tag, _msg);
}
}
});
} else {
DzoSDK.GetInstance().Login();
}
// -------------------------- //
// … Your code … //
}
public void Login()
...
DzoSDK.GetInstance().LogIn();
...
public void Logout()
...
DzoSDK.GetInstance().LogOut();
...
You need to call method after login SDK successful + Choose Server successful + login into Game successful. We need get roleID, serverGameID, … from database’s game.
public void SetRoleInfo(String _serverGameID, String _serverGameName, String _roleID, String _charName, int _level, String _charClassName, String _guildName, int _vipLevel)
...
String _serverGameID = "1";
String _serverGameName = "Quách Tĩnh"; // OPTIONAL
String _roleID = "TestRoleID";
String _roleName = "TestRoleName"; // OPTIONAL
int _level = 1; // OPTIONAL
String _charClassName = ""; // OPTIONAL
String _guildName = ""; // OPTIONAL
int _vipLevel = 1; // OPTIONAL
DzoSDK.GetInstance().SendAPISetRoleInfo(_serverGameID, _serverGameName, _roleID, _roleName, _level, _charClassName, _guildName, _vipLevel); // Set RoleInfo (NEW UPDATE)
...
Config file SDKConfig.json, variable typeSdkServer set value = 0 for server Test, value = 1 for server Real.
Method:
public String GetDzoToken ()
Example:
...
String _token = DzoSDK.GetInstance().GetDzoToken();
...
Method:
public String GetDeviceID ()
Example:
...
String _deviceID = DzoSDK.GetInstance().GetDeviceID();
...
Method:
You only need to call this method to pay and the payment type will depend on the DzoSDK server.
public void MultiPurchase(String _sku, String _itemID, String _roleID, String _gameTransaction, DzoMultiPurchaseCallback _callback)
Example:
| Type | Parameter Name | Type | Description |
| Input | sku | string | Stock Keeping Unit of this item. Ex: “skutest_20k_vnd” |
| itemID | string | ID of Item in your game. Ex: “sword01” | |
| roleID | string | UserID in in game. Ex: “User123456” | |
| gameTransaction | string | Order code, transaction from the game. Ex: “10938093890130192830” |
With DzoMultiPurchaseCallback is defined:
public interface DzoMultiPurchaseCallback {
public class Result {
public enum Status{
Success(0),
ProcessToServerError(-999), CheckLogicError(-997),
Failed(-996),
IAP_ProcessToStoreError(-99), IAP_Success_Payment_OtherAccount(-98);
IAP_User_Canceled(-97);
};
public TypeMultiPurchase typeMultiPurchase;
public DzoMultiPurchaseCallback.Result.Status status;
public int errorCode;
public String money;
public String transactionID;
public String sku;
public String itemID;
public String gameTransaction;
public String roleID;
public String lastHashID;
public String msg;
public IAPPaymentResend paymentResendData; // data verify send to server
}
public void callbackOnResult(DzoMultiPurchaseCallback.Result _result);
}
Example:
DzoSDK.GetInstance().MultiPurchase(_sku, _itemID, _roleID, _gameTransaction, new DzoMultiPurchaseCallback() {
@Override
public void callbackOnResult(Result _result) { try{
Log.d(DzoSDK.TAG, ">>> MultiPurchase callback --- status: " + _result.status + " | errorCode: " + _result.errorCode + " | typePurchase: " + _result.typeMultiPurchase.toString() + " | money: " + _result.money
+ " | transactionID: " + _result.transactionID + " | sku: " + _result.sku + " | itemID: " + _result.itemID + " | roleID: " + _result.roleID + " | gameTransaction: " + _result.gameTransaction + " | lastHashID: " + _result.lastHashID
+ " | msg: " + _result.msg);
if(_result.status == DzoMultiPurchaseCallback.Result.Status.Success){
Log.d(DzoSDK.TAG, ">>> MultiPurchase | Success --- money: " + _result.money
+ " | transactionID: " + _result.transactionID + " | sku: " + _result.sku + " | lastHashID: " + _result.lastHashID);
}else if(_result.status == Result.Status.IAP_Success_Payment_OtherAccount){
Log.d(DzoSDK.TAG, ">>> MultiPurchase | In-App Purchase | Success_Payment_OtherAccount --- money: " + _result.money
+ " | transactionID: " + _result.transactionID + " | sku: " + _result.sku + " | lastHashID: " + _result.lastHashID);
}else if(_result.status == Result.Status.Failed){
Log.d(DzoSDK.TAG, ">>> MultiPurchase | Failed | errorCode: " + _result.errorCode + " | msg: " + _result.msg);
}else if(_result.status == DzoMultiPurchaseCallback.Result.Status.CheckLogicError){
Log.d(DzoSDK.TAG, ">>> MultiPurchase | CheckLogicError| errorCode: " + _result.errorCode + " | msg: " + _result.msg);
}else if(_result.status == DzoMultiPurchaseCallback.Result.Status.IAP_ProcessToStoreError){
Log.d(DzoSDK.TAG, ">>> MultiPurchase | In-App Purchase | Process to Store error: --- errorCode: " + _result.errorCode + " | msg: " + _result.msg);
}else if(_result.status == Result.Status.IAP_User_Canceled){ // New Update
Log.d(DzoSDK.TAG, ">>> MultiPurchase | In-App Purchase | IAP_User_Canceled");
}else{ // In-App Success but verify to server error.
Log.e(DzoSDK.TAG, ">>> MultiPurchase | In-App Purchase Success but verify to server error. You must save this receiptData and re-send to server.\nsku: " + _result.paymentResendData.sku + " | itemID: " + _result.paymentResendData.itemID + " | roleID: " + _result.paymentResendData.roleID + " | gameTransaction: " + _result.paymentResendData.gameTransaction
+ " | errorCode: " + _result.errorCode + " | msg: " + _result.msg + " | jsonStringPayment: " + _result.paymentResendData.jsonStringPayment);
}
}catch (Exception _ex){
Log.e(DzoSDK.TAG, "MultiPurchase Error: "+ _ex);
}
}
}
});
After login SDK successful, to get your Dzocoin + Update Dzocoin every time change, you need to register callback below:
DzoSDK.GetInstance().RegisCallbackUpdateDzoCoin(new DzoCoinUpdateCallback() {
@Override
public void callbackResult(long _dzoCoinUpdate) {
try{
String _valueFormatted = Utilities.FormatCurrency(_dzoCoinUpdate);
Log.d(“DzoSDK”, "DzoCoin: " + _valueFormatted);
}catch (Exception _ex){}
}
});
To custom this dialog, you need to follow the following steps:
- To change background
, you rename your image to “dzo_multipurchase_confirmdialog_bg.png” and paste your image into folder drawable.
- To change button
, you rename your image to “dzo_multipurchase_confirmdialog_btn_close.png” and paste your image into folder drawable.
- To change image
, you rename your image to “dzo_multipurchase_confirmdialog_framedcoin.png” and paste your image into folder drawable.
- To change image
, you rename your image to “dzo_multipurchase_confirmdialog_imgdcoin.png” and paste your image into folder drawable.
- To change button confirm
, you rename your image to “dzo_multipurchase_confirmdialog_btn_confirm.png” and paste your image into folder drawable.
- To change button cancel
, you rename your image to “dzo_multipurchase_confirmdialog_btn_cancel.png” and paste your image into folder drawable.
Likes this:
- To change text color
, in file string.xml, config this line:
<color name="Color_MultiPurchase_Confirm_Dialog_TextBtnConfirm"><![CDATA[{YOUR COLOR}]]></color>
- To change text color
, in file string.xml, config this line:
<color name="Color_MultiPurchase_Confirm_Dialog_TextBtnCancel"><![CDATA[{YOUR COLOR}]]></color>
- To change text color
, in file string.xml, config this line:
<color name="Color_MultiPurchase_Confirm_Dialog_TextContent"><![CDATA[{YOUR COLOR}]]></color>
Method:
public void TrackEventGame(Activity _activity, String _eventName, Hashtable _paramater)
Example:
Track Logout Event:
DzoSDK.GetInstance().TrackEventGame({Activity}, "LogOut", null);
Method:
public void TrackEventGame_ScreenView(Activity _activity, String _screenName)
Example:
DzoSDK.GetInstance().TrackEventGame_ScreenView({Activity}, "Shop");
Method:
public void TrackEventGame_LevelAchieved(Activity _activity, int _level)
Example:
DzoSDK.GetInstance().TrackEventGame_LevelAchieved({Activity}, 10);
Method:
public void TrackEventGame_CompleteRegistration(Activity _activity, String _content)
Example:
DzoSDK.GetInstance().TrackEventGame_CompleteRegistration({Activity}, “”);
Method:
public void TrackEventGame_CompleteTutorial(Activity _activity, String _content)
Example:
DzoSDK.GetInstance().TrackEventGame_CompleteTutorial({Activity}, “”);
Method:
public void TrackEventGame_AchievementUnlocked(Activity _activity, String _content)
Example:
DzoSDK.GetInstance().TrackEventGame_AchievementUnlocked({Activity}, “First Blood”);
Method:
public void TrackEventGame_ReEngagements(Activity _activity, String _content)
Example:
DzoSDK.GetInstance().TrackEventGame_ReEngagements({Activity}, “Click Button Shop”);
To use this feature, we need to add new library in dependencies of build.grade (Module.app)
dependencies {
…
implementation "com.google.android.play:review:2.0.1" // <--- Rating App --->--->
…
}
Method:
public void DisplayReview()
Example:
DzoSDK.GetInstance().DisplayReview();
Overview:
- Enter the webview by clicking on the Dzo icon.
- Claim Giftcode
- Get giftcode form DzoSDK.GetInstance().claimGiftCodeCallback and send request add Item to Server Game.
- Call method ConsumeGiftCode to SDK after add Item successful.
Init:
After Init SDK Successful we need regist callback Claim Giftcode From Dzo Webview:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_login);
// ------ Init DzoSDK ------- //
if(!DzoSDK.GetInstance().IsConnected()){
DzoSDK.GetInstance().Init(this, new DzoInitCallback() {
@Override
public void OnInitSuccess() {
// --- Init Successful --- //
// … Your code … //
// - Register callback Claim GiftCode - //
DzoSDK.GetInstance().claimGiftCodeCallback = new DzoClaimGiftCodeCallback() {
@Override
public void OnClaimGiftCode(String _giftCode, String _severGameID) {
Log.d(DzoSDK.TAG, ">>> Claim GiftCode: " + _giftCode + " - serverGameID: " + _severGameID);
// … Your code … //
// Call method add Item by this gift code //
}
};
// ---------------------------------- //
DzoSDK.GetInstance().Login(); // After Init SDK Successful, you can call Login.
}
……
});
} else {
DzoSDK.GetInstance().Login();
}
// -------------------------- //
// … Your code … //
}
Consume:
After use giftcode and add Item successful, we need to call method Consume to SDK
DzoSDK.GetInstance().ConsumeGiftCode(_giftCode);
Overview:
- Enter the webview by clicking on the Dzo icon.
- Claim Giftcode
Method:
public static Bitmap TakeScreenShot(Activity _activity)
Example:
Bitmap _bitmap = Utilities.TakeScreenShot(this);
Method 1:
public void FBSharePhoto(Bitmap _bitmap, DzoShareCallback _callback)
Example:
DzoSDK.GetInstance().FBSharePhoto(_bitmap, new DzoShareCallback() {
@Override
public void callbackResult(Status _result, int _code, String _msg) {
if(_result == Status.Success){
// - Your Code - //
Log.d(DzoSDK.TAG, ">>> FB Share Photo | msg: " + _msg + " | code: " + _code);
}else if(_result == Status.Cancel){
// - Your Code - //
Log.d(DzoSDK.TAG, ">>> FB Share Photo | msg: " + _msg + " | code: " + _code);
}else{
// - Your Code - //
Log.e(DzoSDK.TAG, ">>> FB Share Photo | msg: " + _msg + " | code: " + _code);
}
}
});
Method 2:
public void FBSharePhoto(byte[] _bytes, DzoShareCallback _callback)
Example:
DzoSDK.GetInstance().FBSharePhoto(_bytes, new DzoShareCallback() {
@Override
public void callbackResult(Status _result, int _code, String _msg) {
if(_result == Status.Success){
// - Your Code - //
Log.d(DzoSDK.TAG, ">>> FB Share Photo | msg: " + _msg + " | code: " + _code);
}else if(_result == Status.Cancel){
// - Your Code - //
Log.d(DzoSDK.TAG, ">>> FB Share Photo | msg: " + _msg + " | code: " + _code);
}else{
// - Your Code - //
Log.e(DzoSDK.TAG, ">>> FB Share Photo | msg: " + _msg + " | code: " + _code);
}
}
});
Method 3:
public void FBSharePhoto(String _url, DzoShareCallback _callback)
Example:
String _url = "https://dzogame.vn/Layout_2020/assets/img/vechungtoi.jpg";
DzoSDK.GetInstance().FBSharePhoto(_url, new DzoShareCallback() {
@Override
public void callbackResult(Status _result, int _code, String _msg) {
if(_result == Status.Success){
// - Your Code - //
Log.d(DzoSDK.TAG, ">>> FB Share Photo | msg: " + _msg + " | code: " + _code);
}else if(_result == Status.Cancel){
// - Your Code - //
Log.d(DzoSDK.TAG, ">>> FB Share Photo | msg: " + _msg + " | code: " + _code);
}else{
// - Your Code - //
Log.e(DzoSDK.TAG, ">>> FB Share Photo | msg: " + _msg + " | code: " + _code);
}
}
});
Method:
public void FBShareLinkInstallApp(DzoShareCallback _callback)
Example:
DzoSDK.GetInstance().FBShareLinkInstallApp(new DzoShareCallback() {
@Override
public void callbackResult(Status _result, int _code, String _msg) {
if(_result == Status.Success){
// - Your Code - //
Log.d(DzoSDK.TAG, ">>> FB Share Link Install App | msg: " + _msg + " | code: " + _code);
}else if(_result == Status.Cancel){
// - Your Code - //
Log.d(DzoSDK.TAG, ">>> FB Share Link Install App | msg: " + _msg + " | code: " + _code);
}else{
// - Your Code - //
Log.e(DzoSDK.TAG, ">>> FB Share Link Install App | msg: " + _msg + " | code: " + _code);
}
}
});