Name Last Update
GameSDKDemo Loading commit data...
README Loading commit data...

README

# Gump SDK 4 for Android接入文档

V4.5.0       
2018年6月13日

## 版本概述

此版本为使用AndroidStudio开发的版本,一改eclipse的工程依赖方式,使用aar的方式提供sdk接入包,除功能外,相对上一版本没有继承关系,请按此文档描述接入.

此SDK适用android4.0以上系统.

## 第一章  接入指南
### 1.依赖导入    
配置gradle,以下为必须项    

    repositories{
        maven{
        	url "http://117.50.8.198:8081/nexus/content/repositories/sdk"
    	}
    }
    dependencies {
        implementation 'com.gumptech.sdk:GameSDK:4.4.0'
    }
    
     
可选接入vk登录时,需要导入vkLibrary工程,并配置模块依赖,如下  

    implementation 'com.gumptech:VKsdk:1.5.4'

选择接入微信登录时,需要增加微信依赖,如下:

	implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:5.1.4'

### 2.修改AndroidManifest.xml文件
首先添加必要的权限,如下所示:  

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <!-- VERY IMPORTANT! Don't forget this permission, or in-app billing won't work. -->
    <uses-permission android:name="com.android.vending.BILLING" />
    
其次注册相应的Activity,具体如下:  

    <activity
        android:name="com.gumptech.sdk.ContainerActivity"
        android:configChanges="orientation|screenSize|keyboardHidden|keyboard|screenLayout"
        android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
        android:launchMode="singleTask"
        android:theme="@style/Theme.TransparentWin" >
    </activity>
    <activity
        android:name="com.gumptech.sdk.PaymentActivity"
        android:configChanges="orientation|screenSize|keyboardHidden|keyboard|screenLayout"
        android:launchMode="singleTask"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" >
        <intent-filter>
            <category android:name="android.intent.category.DEFAULT" />
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data
                android:host="com.gump.sdk"
                android:scheme="gump+游戏的appId" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.gumptech.sdk.ExchangeWindow"
        android:configChanges="orientation|screenSize|keyboardHidden|keyboard|screenLayout"
        android:theme="@style/Theme.WinForExchange" >
    </activity>
    
    <service android:name="com.gumptech.sdk.PushService" />
    
    <!-- vk登录使用,若不接入vk,不需配置 -->
    <activity android:name="com.vk.sdk.VKOpenAuthActivity" />
    <activity
        android:name="com.vk.sdk.VKServiceActivity"
        android:label="ServiceActivity"
        android:theme="@style/VK.Transparent" />
     <!--wechat接入使用,不接入不需要配置-->
     <activity
        android:name=".wxapi.WXEntryActivity"
        android:exported="true"></activity>
    
### 3.向Gump平台索要游戏ID(AppID),完成代码接入     
正式开始接入逻辑代码前,先介绍下一些附加设置,以方便代码接入  

*是否打印debug日志    

    GumpSDK.getSettings().enableDebugLogging(true);

*横竖屏控制,默认为横屏,参数为false即为竖屏   
    
    GumpSDK.getSettings().setScreenLandscape(true);   
    
*设置需要启用的第三方登录,参数可选类型见第二章:[第三方登录平台](http://repository.gumptech.com:81/document/gamesdk4-android/blob/master/IntegrationGuide.md#1-third_plat) 字段说明

    GumpSDK.getSettings().requestThirdSupport(SDKSettings.THIRD_SUPPORT_*);

*若要使用V4版支付请设置

    GumpSDK.getSettings().setPaymentVersion(PaymentVersion.V4);

#### 1.调用GumpSDK前需要执行初始化。     

若不需要分渠道      

    GumpSDK.init(Context,Appid, Appkey,InitializeCallback);   
如果需要定义渠道,必须使用如下方法       

    GumpSDK.init(Context,Appid, Appkey,ChannelId,InitializeCallback);   

InitializeCallback为初始化回调接口,此接口只有一个回调方法initComplete(int result) result标识是否初始化成功,当result等于GumpSDK.CODE.OK时为成功,其他为失败

#### 2.调用GumpSDK的开始方法,将执行登录流程,需要一个Activity实例作参数       

    GumpSDK.start(Activity);  
在此之前,开发者需要注册用户状态监听以接受用户的登录/登出通知,通常如下:    

    GumpSDK.setUserStateListener(new LoginStateListener() {
            @Override
            public void onLoginSuccess(GumpUser gumpUser) {
                //登录成功,用户信息包含在GumpUser对象里
            }

            @Override
            public void onLoginFailed(int code, String msg) {
                //登录出错,根据错误码和信息判断错误类型
                Toast.makeText(MainActivity.this, "Login failed:code="+code+",message="+msg, Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onLoginCanceled() {
                //用户取消登录
                Toast.makeText(MainActivity.this, "operate be canceled", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onLogout() {
                //用户登出
                
            }
	     @Override
            public void onPermissionDenied() {
		//用户拒绝授予权限
            }
        });
    
如上成功登录后收到的GumpUser对象包含以下信息  

    gumpUser.getUid();//获取用户的userid,此Id标识唯一用户!  
    gumpUser.getAccountType();//用户类型,此类型数据可从GumpPreference常量获取  
    gumpUser.getSessionKey();//登录的sessionKey对象,获取sessionKey字符串请使用此对象的getToken()方法  

***注意:若需要使用微信登录,需要在packageName.wxapi下增加一个名为WXEntryActivity并继承com.gumptech.sdk.WXCallbackActivity的Activity,并参考AndroidManifest.xml设置的说明,做相应的配置,packageName为应用的包名,此Activity不须任何实现。***

***以GumpSDKDemo为例,包名为com.gumptech.sdk.demo,则WXEntryActivity的完整包路径为:com.gumptech.sdk.demo.wxapi.WXEntryActivity***

#### 3.支付功能  
1)使用gump通行证登录,其中除nick外所有参数为必传参数     

    Bundle payInfo = new Bundle();
    payInfo.putString("nick", "thi");
    payInfo.putString("product", "元宝");
    payInfo.putFloat("amount", 40.0f);
    payInfo.putString("extraInfo", "This is demo!");
    payInfo.putString("serverId", "B4003");
    payInfo.putString("roleId", "10010");
    payInfo.putString("sessionKey","sessionkey");
    GumpSDK.pay(MainActivity.this, payInfo,PurchaseCallback);
调用pay方法时,必须穿入一个bundle对象,包含如上字段,除nick外所有字段必须全部包含,其中sessionKey为登录时返回的sessionKey  
    
    
2)IAP支付   
    
    Bundle payInfo = new Bundle();
    payInfo.putString("product", "gp_skuId");
    payInfo.putFloat("amount", 0.1f);
    payInfo.putString("extraInfo", "This is demo!");
    payInfo.putString("serverId", "100");
    payInfo.putString("roleId","100123");
    GumpSDK.iap(MainActivity.this, payInfo, PurchaseCallback);
                
3)PurchaseCallback为支付状态回调接口,此接口含有3个方法  

    @Override
    public void onPurchaseCompleted(PurchaseResult result) {
        Log.i(TAG,"purchase completed");
    }

    @Override
    public void onPurchaseError(int code, String msg) {
        Log.i(TAG,"purchase error");
    }

    @Override
    public void onPurchaseCanceled() {
        Log.i(TAG,"purchase canceled");
    }
    
#### 4.注销登录      

    GumpSDK.logout(Activity);
当此方法调用后,用户退出登录,并会通过LoginStateListener接口通知调用程序!为了便于用户切换登录账户,请在游戏内提供用户注销的触发按钮   
#### 5.运营开关接口,若需要接入,会有我方运营人员提出需求,否则不需要接入(若对此接口不知所云,即可认为不需要接入,请自行忽略)
    
    GumpSDK.checkRisk(this, new ResultCallback() {
            @Override
            public void onResult(boolean result) {
                Log.i(TAG,result?"There is some risks":"Nothing is risk");
            }
        });
        
## 第二章 常量字段与代码
### 1.第三方登录平台(third_plat)
	|         常量字段               |    说明      |
	|--------------------------------|--------------|
	|SDKSettings.THIRD_SUPPORT_FB    |Facebook登录  |
	|SDKSettings.THIRD_SUPPORT_GOOGLE|Google登录    |
	|SDKSettings.THIRD_SUPPORT_LINE  |Line登录      |
	|SDKSettings.THIRD_SUPPORT_VK    |VK登录        |
	|SDKSettings.THIRD_SUPPORT_WECHAT|微信登录       |
### 2.登录账户类型
	|               常量字段              |     说明    |
	|-------------------------------------|-------------|
	|GumpPreference.ACCOUNT_TYPE_FB       |Facebook用户 |
	|GumpPreference.ACCOUNT_TYPE_REG      |Gump注册用户 |
	|GumpPreference.ACCOUNT_TYPE_QUICK_REG|快速注册用户 |
	|GumpPreference.ACCOUNT_TYPE_GOOGLE   |Google用户   |
	|GumpPreference.ACCOUNT_TYPE_LINE     |Line用户     |
	|GumpPreference.ACCOUNT_TYPE_VK       |VK用户       |
	|GumpPreference.ACCOUNT_TYPE_WECHAT   |微信用户      |

## 第三章 常见问题      
### 问题1: 如何避免混淆对SDK的影响?       
解答:有些开发者对接入了SDK的程序进行混淆时,有可能会覆盖某些java
类,导致SDK无法正常工作,解决方法如下:      
Ø  请开发者在混淆配置文件proguard.cfg或proguard-project.txt的最后加上       

    -keepattributes *Annotation*,InnerClasses,SourceFile,LineNumberTable
    -keep public class * extends android.app.Service
    -keep public class com.google.vending.licensing.ILicensingService
    -keep public class com.android.vending.licensing.ILicensingService
    -keep class com.gumptech.sdk.view.* {*;}
    -keep class com.gumptech.sdk.web.* {*;}
    -keep class com.gumptech.sdk.bridge.impl.*{*;}
    
    
使得混淆的时候不会影响SDK的命名空间。