README.md 14.5 KB

EasyGame客户端对接文档

更新日志

  • 2016-12-23
删除Google安装监听(已接入游戏删除AndroidManifest.xml以下配置) 
        <receiver
            android:name="com.appsflyer.MultipleInstallBroadcastReceiver"
            android:exported="true" >
            <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER" />
            </intent-filter>
        </receiver>
        <receiver
            android:name="com.platform7725.gamesdk.InstallReceiver"
            android:enabled="true"
            android:exported="true" >
            <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER" />
            </intent-filter>
        </receiver>
        <receiver
            android:name="com.mobileapptracker.Tracker"
            android:exported="true" >
            <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER" />
            </intent-filter>
        </receiver>

修改Google支付可重新提交(已接入游戏替换新的p7725sdk.jar)
  • 2016-11-14

    删除无用第三方jar包(已接入请按照libs删掉多余jar并重新替换p7725SDK.jar)
    
  • 2016-11-11

    退出接口弃用
    
  • 2016-11-9

    更新登录界面资源图片
    
  • 2016-9-15

    FB登录改成 GRAPH_API_VERSION = "v2.7"
    
  • 2016-8-25

    修复google play的风险提示
    

以下参数需游戏客户端根据实际情况修改

res/values/p7725sdk_app_private_yijidq140515.xml

<string name="com_7725_app_name">这里填写游戏名字</string>
<string name="com_7725_game_main_activity">这里填写游戏程序入口的类名和包名</string>
<string name="com_7725_sdkProtocolToken">这里填写由我方提供的Token</string>
<string name="com_7725_sdkProtocolGame">这里填写由我方提供的游戏简称</string>
<string name="com_7725_facebookSdkApplicationId">这里填写游戏FaceBook的APPID</string>

AndroidManifest.xml

<meta-data
    android:name="com_7725_payment_flag"
    android:value="gash" />  gash为只显示第三方充值,google为调用支付根据0/1来是否显示第三方支付

1.配置开发环境

  • 使用easygameSDK环境配置需要完成下面几个步骤:

1.把res中所有资源拷贝合并到你项目res目录中。

2.把assets中的内容拷贝合并你的项目assets目录中。

3.把libs中所有jar包拷贝到你的项目libs目录中。

2.配置AndroidManifest.xml

1.添加permission

    <!-- easygame SDK PERMISSION START. -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="com.android.vending.BILLING" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="com.library.permission.ACCESS_DOWNLOAD_MANAGER" />
    <uses-permission android:name="com.library.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED" />
    <uses-permission android:name="com.library.permission.SEND_DOWNLOAD_COMPLETED_INTENTS" />
    <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <permission
        android:name="com.library.permission.ACCESS_DOWNLOAD_MANAGER"
        android:description="@string/permdesc_downloadManager"
        android:label="@string/permlab_downloadManager"
        android:protectionLevel="normal" />
    <permission
        android:name="com.library.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED"
        android:description="@string/permdesc_downloadManagerAdvanced"
        android:label="@string/permlab_downloadManagerAdvanced"
        android:protectionLevel="normal" />
    <permission
        android:name="com.library.permission.SEND_DOWNLOAD_COMPLETED_INTENTS"
        android:description="@string/permdesc_downloadCompletedIntent"
        android:label="@string/permlab_downloadCompletedIntent"
        android:protectionLevel="normal" />
    <!-- easygame SDK PERMISSION END. -->

2.添加application相关属性

        <!-- easygame SDK ACTIVITY,SERVER,RECEIVER START -->
        <!-- FloatMenu start -->
        <activity
            android:name="com.platform7725.gamesdk.floats.FloatMenuMainActivity"
            android:theme="@style/p7725_full_screen" />
        <activity
            android:name="com.platform7725.gamesdk.floats.FloatDetailMainActivity"
            android:theme="@style/p7725_full_screen" />
        <!-- FloatMenu end -->
        <activity
            android:name="com.platform7725.gamesdk.CustomerServiceActivity"
            android:configChanges="keyboardHidden|orientation"
            android:theme="@style/p7725_full_screen" />
        <activity
            android:name="com.platform7725.gamesdk.DepositsActivity"
            android:configChanges="keyboardHidden|orientation"
            android:theme="@style/p7725_full_screen"
            android:windowSoftInputMode="adjustResize" />
        <activity
            android:name="com.platform7725.gamesdk.LoginProActivity"
            android:theme="@style/LoginPro" />
        <activity
            android:name="com.platform7725.gamesdk.LoginActivity"
            android:theme="@style/Login" />
        <activity
            android:name="com.platform7725.gamesdk.UserListActivity"
            android:theme="@style/UserList" />
        <activity
            android:name="com.platform7725.gamesdk.ExitActivity"
            android:theme="@style/Login" />
        <activity
            android:name="com.platform7725.gamesdk.ShareByFacebookActivity"
            android:theme="@style/UserList" />
        <activity
            android:name="com.platform7725.gamesdk.ShareByLINEActivity"
            android:configChanges="keyboardHidden|orientation"
            android:theme="@style/p7725_full_screen" />
        <activity
            android:name="com.platform7725.gamesdk.ClauseActivity"
            android:configChanges="keyboardHidden|orientation"
            android:theme="@style/p7725_full_screen" />

        <receiver android:name="com.platform7725.gamesdk.receive.OtopGameReceiver" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                <action android:name="android.intent.action.BATTERY_CHANGED" />
            </intent-filter>
        </receiver>

        <service android:name="com.kuadcpa.OpenUDID_service" >
            <intent-filter>
                <action android:name="org.openudid.GETUDID" />
            </intent-filter>
        </service>
        <service android:name="com.platform7725.gamesdk.service.OtopGameService" >
            <intent-filter>
                <action android:name="com.platform7725.gamesdk.service.NOTICES_FILTER" />
            </intent-filter>
        </service>
        <activity
            android:name="com.facebook.LoginActivity"
            android:label="@string/com_7725_app_name"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/com_7725_facebookSdkApplicationId" />
        <meta-data
            android:name="com_7725_payment_flag"
            android:value="gash" />
        <meta-data  android:name="com.google.android.gms.version"  
             android:value="@integer/google_play_services_version" />
        <!-- easygame SDK ACTIVITY、SERVER、RECEIVER END. -->
        <!-- download Begin -->
        <activity
            android:name="com.library.providers.downloads.ui.DownloadListActivity"
            android:launchMode="singleTask"
            android:theme="@style/p7725_full_screen" />
        <activity
            android:name="com.p7725.downloadmanager.DownloadManagerActivity"
            android:theme="@style/p7725_full_screen" />
        <provider
            android:name="com.library.providers.downloads.DownloadProvider"
            android:authorities="com.platform7725.gamesdk"
            android:exported="false" />
        <service android:name="com.library.providers.downloads.DownloadService" />
        <receiver
            android:name="com.library.providers.downloads.DownloadReceiver"
            android:exported="false" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>
        <!-- download End -->

3.代码相关接口说明

1.调用登录界面

通过调用静态方法

LoginProActivity.login(requestCode, callback, context);

进行登录。登录成功后,帐户信息封装为USER添加到intent,通过接口回传。

  • requestCode:返回码,接入方定义,用于LoginActivity界面返回本游戏界面时触发onActivityResult的响应码。

  • Callback:ITopSDKEventsListener接口,登录成功后,数据将封装到intent,并通过这个接口回调。请接入方的activity实现该接口,编写登录成功后的代码。

  • Context:当前的context

示例

            LoginProActivity.login(LOGIN_CODE, new ITopSDKEventsListener() {

                @Override
                public void onEventDispatch(int code, Intent data) {
                    Log.e("onEventDispatch--->", "code:" + code);
                    User user = (User) data.getSerializableExtra("user");
                    if (user != null) {
                        String nickName = user.getNickname();
                        Toasts.makeText(context, "账号登录成功:"+nickName);
                    }
                }
            }, context);

2.获取登录用户资料

在Activity中实现ITopSDKEventsListener接口,实现onEventDispatch方法获取用户资料(Class User, User结构)

User user = (User) getIntent().getSerializableExtra("user");

User类提供的函数

方法名                           返回值数据类型               返回值含义
getUserID()                     String                      easygame用户惟一标识
getNickName()                   String                      easygame用户昵称
getSex()                        String                      easygame用户的性别,枚举值:男、女
getLoginTime()                  Integer                     easygame用户本次成功登录时间,UNIXTIME时间戳
getSign()                       String                      给游戏服务器验签使用,验签方式
getGame()                       String                      用户来源游戏别名,如:fengyuntx、7725
getOpenidChannel()              String                      用户来源渠道名,枚举值:Facebook, Google
getOpenUID()                    String                      OPENID用户标识,有约定的游戏才可以使用
setServer (serverID)            Boolean                     用户进入伺服器时调用,区分伺服器的游戏若无调用本函数将无法使用储值功能
setRole(roleid, rolename)       Boolean                     用户登入角色时调用,不管首次或下次登入都需要调用,有角色名的游戏若无调用本函数将无法使用储值功能

3.游戏服务端登录验证

游戏客户端发送以下参数到游戏服务端进行验证。如:

userid = User.getUserID()
openuid = User.getOpenUID()
nickname = User.getNickName()
sex = User.getSex()
logintime = User.getLoginTime()
Sign = User.getSign()

签名加密方式

Sign = md5( game_server_key + userid + openuid + nickname + sex + logintime );

注:集成过程中,发现不少厂商将上述参数作特殊字符过滤处理,导致签名校验失败,在此强调 md5 加密用的参数,绝不能过滤特殊字符。

4.设置服务器和角色信息

  • 设置服务器信息

    UserManager.setServer(context, serverid);
    
  • context 上下文

  • serverid 服务器ID

如果不需要设置服务器编号,请设默认值 UserManager.setServer (0)

注:游戏若无调用本函数将无法使用充值功能。

  • 设置角色信息
UserManager.setRole(context, roleid, rolename);
  • context 上下文

  • roleid 游戏的玩家角色ID

  • rolename 游戏的玩家角色名

注:有角色名的游戏若无调用本函数将无法使用储值功能。

特殊情况:

如果游戏记录玩家的历史登录记录,并且提供快速选服选角色进入游戏的,则需同时调用

UserManager.setRole(context, roleid, rolename);
UserManager.setServer(context, serverid);

5.进入充值界面

调用方法

DepositsActivity.pay(context, info, extra);
  • context :当前上下文
  • info:是游戏自定义的字符串参数,可留空。
  • extra:json格式参数,用于是否显示google play以外的储值方式。如:{“payment_flag”:"1"} 1是开启,0是关闭

示例

DepositsActivity.pay(context, "", "{\"payment_flag\":\"0\"}");

6.打开客服界面

CustomerServiceActivity.customer(context);

7.SDK悬浮按钮

FloatManager.init(Context activity, int init_y);

悬浮按钮初始化方法,请在登录后调用。

  • context:上下文对象。
  • init_y:悬浮按钮初始化位置(Y坐标位置),如果不需要则填入任意小于0的数。
FloatManager. onPause ();

请务必在Activity生命周期onPause方法调用。

FloatManager. onResume ();

请务必在Activity生命周期onResume方法调用。

FloatManager. onDestroy ();

请务必在Activity生命周期onDestroy方法调用。

8.SDK退出接口(已弃用,非必接)

 ExitActivity.exit(context, exitCallback);
  • context 上下文

  • exitCallback IExitEventsListener接口实例。

备注:实现IExitEventsListener接口,重写onExitEventDispatch()方法,在方法添加原来的退出代码。

示例

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (KeyEvent.KEYCODE_BACK == keyCode) {
            ExitActivity.exit(MainActivity.this, new IExitEventsListener() {
                @Override

                public void onExitEventDispatch() {
                    //游戏执行退出
                    finish();
                }
            });
        }
        return super.onKeyDown(keyCode, event);
    }