Android果盘SDK接入文档V3.0.0
- 格式:pdf
- 大小:880.87 KB
- 文档页数:12
sdk接入流程标准下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!1. 需求分析确定需要接入的 SDK 功能和目标。
了解 SDK 的技术要求和限制。
个推平台客户端SDK接入文档(JAR模式)编号: GEXIN_ANDROID_SDK_JAR版本: GEXIN_ANDROID_SDK_JAR V1.3.8个信互动(北京)网络科技有限公司2013年11月目录开发准备 (4)1. 注册账号并登记应用(必须) (4)2. 获取SDK开发工具包(必须) (4)集成SDK(必须) (5)测试(必须) (9)扩展功能 (10)获取透传消息(可选) (10)用户关系映射(可选) (15)SDK接口 (16)MessageManager (18)getInstance (18)initialize (18)getNetstat (18)feedbackAction (19)getVersion (19)setTag (20)setSil entTime (20)stopService (20)GexinSdkNetstat (21)inboundBytes (21)outboundBytes (21)Tag (21)setName (22)getName (22)运行环境1. SDK 支持Android 1.6及以上版本的手机系统2. 手机必须要有网络(GPRS 、3G 或Wifi 网络等)3. 手机可以没有SIM 卡,但是可能导致部分功能缺失4. 手机可以不挂载SD 卡,但会使部分功能无法正常工作。
推送服务框架 个信SDK个信服务端第三方服务端第三方客户端客户端整合发布维护<UID,ClientID>映射表UID 为第三方系统内的用户ID3.将<UID,ClientID>保存到Server 1.SDK 初始化2.返回ClientID 4.推送消息payload指定CID 进行推送 5.查找到相应的设备,推送消息6.消息通知,将payload 传递给客户端说明:● Appkey :预先分配的第三方应用ID 。
● AppSecret :认证密钥,预先协商后登记到双方服务端。
基于ApkPlug以组件形式调用ShareSDK目录一,项目目的 (2)二,项目所使用到的开发库 (2)三,项目目录结构 (2)四,使用步骤 (2)1,导入ApkPlug框架 (2)2,导入ShareSDK调用库 (3)3,配置相关权限 (3)4,配置相关activity (3)5,调用ShareSDK组件 (5)6,操作演示 (6)一,项目目的利用ApkPlug插件化框架将ShareSDK组件化,以实现按需动态加载和减小应用体积的目的。
ShareSDK是非常棒的移动社会化分享和评论工具,相信我们在开发应用过程中都离不开它。
但是当我们集成ShareSDK时候同样会遇到一些问题。
1.ShareSDK包比较大,组合国内多家分享平台以后其SDK包的大小应该在1M以上,这对应用来说还是不小的负荷。
2.集成ShareSDK过程中我们不可避免的需要将它的资源文件复制到应用的res资源目录下,这对我们应用后期维护造成不小的干扰。
基于以上的两大情况,我想通过ApkPlug框架将ShareSDK整体做成组件,在用户需要的时候才动态的从服务端加载到本地,这样做很方便的就解决了以上两个问题。
二,项目所使用到的开发库Apkplug v2.7.5版本 (必须是v2.7.5以上版本,否则无法运行)Apkplug插件托管服务 v1.8.0版本以上ShareSDK v2.10.7 (使用的最新版本DEMO)三,项目目录结构ShareSDKMain ---主应用演示DEMOShareSDKPlug ---ShareSDK 组件的具体实现PlugShareSDK1.0.0.jar --组件调用库四,使用步骤1,导入ApkPlug框架将Bundle2.7.5-Dev.jar 和 ApkplugCloudService1.8.0-Release.jar 拷贝到主应用libs目录下Bundle2.7.5-Dev.jar 是apkplug核心库 (v2.7.5版本以后只需要该文件即可不在需要libndkfoo.so)ApkplugCloudService1.8.0-Release.jar 是apkplug插件托管服务SDK,我们用它下载服务端的ShareSDK组件2,导入ShareSDK调用库将PlugShareSDK1.0.0.jar拷贝到主应用的libs目录下,它是ShareSDK组件的调用库,它封装了ShareSDK组件的调用接口,以及如果从apkplug插件托管服务下载组件的业务逻辑。
Android-SDK接⼊-YSDK(应⽤宝1.7.0)SDK接⼊-YSDK(应⽤宝1.7.0)-2021-01-07 ⼤家好,近期在做多渠道打包平台,会定期遇到第三⽅SDK升级,所以很被动的是,我们也要跟随他们的步伐,及时升级。
否则将⾯临第三⽅开发者站⽆法过审的问题。
之前我整理了 CodeReview 系列的博客,今天开始会抽时间整理第三⽅SDK接⼊的系列问题。
当然,CodeReview系列的还会进⾏下去。
应⽤宝SDK的接⼊其实还是很繁琐的,各种参数的配置,还需要注意区分沙盒环境的配置和现⽹环境的配置的不同区别。
今天我分享⼏个典型的问题:1.沙盒环境和现⽹环境最容易出现的错误:MidasPay 的沙盒环境下的 appKey 其实和 qqAppKey的值是相同的,但本质上者俩个东西是独⽴的,所以在切换到现⽹环境后,⼀定要注意,千万别把动qqAppKey。
erLoginRet flag:3100;get login ret failed, on login recrod in db!其实3100错误在 YSDK 的官⽹解释是本地票据不可⽤,引导⽤户重新登录。
同时也给出了检测⽅案,⽐如参数核对,包名是否⼀致、签名是否⼀致等等。
但是⼤多情况下,⼤家应该不会出像这些问题。
让我们来看下详细的⽇志: 异常详细信息:2021-01-06 20:56:03.623 8897-8897/? D/YSDK_DOCTOR: OK-notifyWakeupAsync2021-01-06 20:56:03.623 8897-8897/? D/YSDK UserModule: mUserListener.OnWakeupNotify2021-01-06 20:56:03.623 8897-8897/? D/YSDK UserModule: notifyWakeupAsync finished2021-01-06 20:56:14.992 8897-8971/? D/YSDK b$a.run: TaskDispatcher run2021-01-06 20:56:14.993 8897-8971/? D/YSDKDuration: Game time Duration :1202021-01-06 20:56:14.993 8897-8971/? D/YSDK_USER_WX: WX OK-getLoginRecord2021-01-06 20:56:14.993 8897-8971/? D/YSDK_USER_WX: getWXUserLoginRet2021-01-06 20:56:14.993 8897-8971/? D/YSDK_USER_WX: UserLoginRet flag:3100;get login ret failed, on login recrod in db!2021-01-06 20:56:14.993 8897-8971/? D/YSDK_USER_WX: WXUserLoginRet2UserLoginRet2021-01-06 20:56:14.993 8897-8971/? D/YSDK_USER_WX: WX OK-getLoginRecord2021-01-06 20:56:14.993 8897-8971/? D/YSDK_USER_WX: getWXUserLoginRet2021-01-06 20:56:14.993 8897-8971/? D/YSDK_USER_WX: UserLoginRet flag:3100;get login ret failed, on login recrod in db!2021-01-06 20:56:14.993 8897-8971/? D/YSDK_USER_WX: WXUserLoginRet2UserLoginRet上⾯的异常信息发⽣在微信调起后,然后点击授权后,发现app并没有收到回调,也就是 YSDK OnLoginNotify ⽅法没有被回调。
在现如今的移动应用开发领域,集成第三方库和SDK已经成为一项常见且必备的技术。
Android作为全球最大的移动操作系统之一,也有着丰富的第三方库和SDK可供使用。
本文将讨论如何在Android应用中高效地集成第三方库和SDK,以提升应用的功能和用户体验。
### 理解第三方库和SDK首先,需要明确第三方库和SDK的概念。
第三方库是由其他开发者编写的可复用代码模块,通过引入这些库,我们可以快速地集成一些通用的功能,例如网络请求、图片加载、数据库操作等。
而SDK(软件开发工具包)则是一套提供了特定功能集合和开发工具的软件包,通常由软件公司或平台提供,用于支持特定平台或技术的开发工作。
### 阅读文档与选择第三方库和SDK在集成第三方库和SDK之前,我们首先需要阅读相关的文档和说明。
通常,每个第三方库和SDK都有相应的官方文档,其中包含了详细的使用说明和示例代码。
通过仔细阅读文档,我们可以了解库或SDK 提供的功能、使用方法以及可能的注意事项。
此外,在选择第三方库和SDK时,我们应该关注其稳定性、活跃度、用户评价等因素。
一个高质量、受欢迎的第三方库和SDK往往有着更好的维护和支持,能够提供更稳定、高效的功能。
### 使用Gradle管理依赖在Android开发中,使用Gradle来管理依赖是一种常见且推荐的方式。
Gradle是一种基于Groovy的构建自动化工具,它可以帮助我们快速、方便地添加和管理第三方库和SDK的依赖。
在项目的文件中,我们可以通过dependencies代码块来声明所需的库和SDK依赖。
例如,要使用Google的Material Design库,我们可以在dependencies中添加如下代码:```implementation ':material:'```通过使用Gradle管理依赖,我们可以方便地升级和管理第三方库和SDK的版本,确保应用始终使用最新的功能和修复了的bug。
sdk接入流程SDK接入流程。
一、概述。
SDK(Software Development Kit)是软件开发工具包的缩写,是一套开发工具的集合,用于实现特定软件应用程序的开发。
在移动应用开发中,SDK的接入是非常重要的一环,它可以为开发者提供丰富的功能和服务,帮助开发者更快地完成应用的开发和发布。
二、准备工作。
在进行SDK接入之前,开发者需要做好一些准备工作,包括:1. 确定需求,明确自己的应用需要哪些功能和服务,选择合适的SDK进行接入。
2. 获取SDK,从官方渠道获取最新版本的SDK,并阅读相关文档和说明。
3. 确定平台和版本,确定要接入的平台和版本,例如Android、iOS等,以及对应的版本号。
4. 确认权限,确认应用需要的权限和对应的申请流程,保证应用在接入SDK时能够正常运行。
三、SDK接入流程。
1. 导入SDK,将下载好的SDK导入到开发环境中,例如Android Studio、Xcode等。
2. 配置参数,根据SDK提供的文档,配置相应的参数,例如应用ID、密钥、回调URL等。
3. 添加依赖,在项目中添加SDK的依赖,确保应用能够正常调用SDK提供的功能和服务。
4. 初始化SDK,在应用启动时,初始化SDK,进行必要的设置和初始化操作。
5. 调用接口,根据SDK提供的接口文档,调用相应的接口实现功能,例如登录、支付、分享等。
6. 处理回调,处理SDK回调,处理用户的操作结果或者错误信息,保证应用的正常运行。
7. 测试调试,在接入SDK后,进行测试调试,确保应用在不同环境下能够正常使用SDK提供的功能。
四、注意事项。
在进行SDK接入的过程中,开发者需要注意以下事项:1. 遵循官方文档,严格按照SDK官方提供的文档和规范进行接入,确保接入的正确性和稳定性。
2. 版本更新,定期关注SDK的版本更新,及时更新应用中使用的SDK版本,以获取最新的功能和修复已知的问题。
3. 权限申请,在应用中使用SDK时,需要向用户申请相应的权限,确保用户的隐私和数据安全。
闲聊SDK接入以下是游戏需求(Ctrl点击进入超链接):游戏场景图需求补充:游戏头像以及昵称按照最先点击登录的类型处理,即先点击哪种登录方式,就以该种登录方式显示。
以下是闲聊给出的文档:闲聊安卓开发文档闲聊IOS开发文档闲聊server开发文档以下是闲聊给出的demo(在开发过程中闲聊有更换sdk,所以他们的demo仅做参考):安卓_demoIOS_demo以下是河南麻将项目接入文档(并未完全按照闲聊所给文档接入):一、安卓篇1.在Eclipse内导入sugramsdk.jar。
2.在android项目内添加SGEntryActivity.java(位置为:henmj\android\src\com\happyplay\hn mj\sgapi)3.在android项目内添加MyHttpClient.java、SSLSocketFactoryEx.java、XianLiaoActivity.java三个文件(位置为:henmj\android\src\org\cocos2dx\javascript)4.在android项目内修改AppActivity.java1).添加以下内容//xianliaoimport org.sugram.im.sdk.api.ISGAPI;import org.sugram.im.sdk.api.SGAPIFactory;import org.sugram.im.sdk.constants.SGConstants;import org.sugram.im.sdk.modelmsg.SGGameObject;import org.sugram.im.sdk.modelmsg.SGImageObject;import org.sugram.im.sdk.modelmsg.SGMediaMessage;import org.sugram.im.sdk.modelmsg.SGTextObject;import org.sugram.im.sdk.modelmsg.SendMessageToSG;2).在AppActivity里添加public class AppActivity extends Cocos2dxActivity {......// xianliaopublic ISGAPI sgApi;public static String XL_AppID = "xxxxxxxxxx闲聊审核获得xxxxxxxxxx";public static String XL_AppSecret = "xxxxxxxx闲聊审核获得xxxxxxxxxx";public String xlInviteGameInfo = "";......}3).在onCreate函数内添加public void onCreate(Bundle savedInstanceState) {......xianLiaoInit();//get intent data from XianLiaoActivityBundle bundle = getIntent().getExtras();if(bundle != null){String msg =bundle.getString("XL_InviteGameInfo");xlInviteGameInfo = msg;Log.i("getIntent","getIntent_XL_InviteGameInfo:"+msg);}......try {......this.writeFileData("xianliao.txt", "has xianliao");} catch (IOException e) {......}......}4).添加函数RunJS_obj//param是{} 对象的public void RunJS_obj(String name, String param){Cocos2dxHelper.runOnGLThread((new Runnable() {String js;String para;@Overridepublic void run() {// TODO Auto-generated method stubString command = "cc.eventManager.dispatchCustomEvent('" + js + "'," + para + ")";org.cocos2dx.lib.Cocos2dxJavascriptJavaBridge.evalString(command);}public Runnable setjs(String js, String pa) {this.js = js;this.para = pa;return this;}}).setjs(name, param));}5)..添加函数xianLiaoInitpublic void xianLiaoInit() {// 通过SGAPIFactory 工厂,获取ISGAPI 实例sgApi = SGAPIFactory.createSGAPI(this, XL_AppID);sgApi.registerApp(XL_AppID);}6).修改微信登录函数wxLogin把SendAuth.Req req = new SendAuth.Req(); 改为com.tencent.mm.sdk.modelm sg.SendAuth.Req req = new com.tencent.mm.sdk.modelmsg.SendAuth.Req();7).添加函数xianLiaoLoginpublic void xianLiaoLogin() {if(isXLInstall()){org.sugram.im.sdk.modelmsg.SendAuth.Req req = new org.sugram.im.sdk. modelmsg.SendAuth.Req();req.state = "none";sgApi.sendReq(req);}}8).添加函数isXLInstall//判断闲聊是否安装public boolean isXLInstall(){boolean haveXL = sgApi.isSGAppInstalled();if(haveXL){return true;}else{doWithoutXLApp();return false;}}9).添加函数doWithoutXLApp//have no xl apppublic void doWithoutXLApp(){Log.i("xianliao","doWithoutXLApp");Intent viewIntent = new Intent("android.intent.action.VIEW",Uri.parse("/o/simple.jsp?pkgname=org.xianliao"));startActivity(viewIntent);}10).添加函数xlShareTextpublic void xlShareText(String text) {if(isXLInstall()){// 初始化一个SGTextObject 对象,填写分享的文本内容SGTextObject textObject = new SGTextObject();textObject.text = text;// 用SGTextObject 对象初始化一个SGMediaMessage 对象SGMediaMessage msg = new SGMediaMessage();msg.mediaObject = textObject;// 构造一个ReqSendMessageToSG.Req req = new SendMessageToSG.Req();req.transaction = SGConstants.T_TEXT;// 分享文本req.mediaMessage = msg;req.scene = SendMessageToSG.Req.SGSceneSession; // 代表分享到会话列表// 调用api 接口发送数据到闲聊sgApi.sendReq(req);}}11).添加函数xlShareInviteGamepublic void xlShareInviteGame(String roomId, String roomToken,String title, String description) {if(isXLInstall()){Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.icon);// 初始化一个SGGameObject 对象,设置所分享的游戏图片内容SGGameObject gameObject = new SGGameObject(bitmap);gameObject.roomId = roomId;gameObject.roomToken = roomToken;// 用SGGameObject 对象初始化一个SGMediaMessage 对象SGMediaMessage msg = new SGMediaMessage();msg.mediaObject = gameObject;msg.title = title;msg.description = description;// 构造一个ReqSendMessageToSG.Req req = new SendMessageToSG.Req();req.transaction = SGConstants.T_GAME;req.mediaMessage = msg;req.scene = SendMessageToSG.Req.SGSceneSession; // 代表分享到会话列表// 调用api 接口发送数据到闲聊sgApi.sendReq(req);}}12).添加函数xlShareTexturepublic void xlShareTexture(String path) {if(isXLInstall()){Bitmap bitmap = BitmapFactory.decodeFile(path);// 初始化一个SGImageObject对象,设置所分享的图片内容SGImageObject imageObject = new SGImageObject(Bitmap.createScaledBitmap(bitmap,1000,(int) (bitmap.getHeight() / (bitmap.getWidth() / 1000f)),true));// 用SGImageObject对象初始化一个SGMediaMessage对象SGMediaMessage msg = new SGMediaMessage();msg.mediaObject = imageObject;// 构造一个ReqSendMessageToSG.Req req = new SendMessageToSG.Req();req.transaction = SGConstants.T_IMAGE;req.mediaMessage = msg;req.scene = SendMessageToSG.Req.SGSceneSession; // 代表分享到会话列表// 调用api接口发送数据到SugramsgApi.sendReq(req);}}13).添加函数GetXLInviteGameInfopublic void GetXLInviteGameInfo(){String rtn_msg = xlInviteGameInfo;if(rtn_msg != ""){RunJS_obj("XL_InviteGameInfo",rtn_msg);}xlInviteGameInfo = "";}14).添加函数StartXianLiaoLoginpublic static void StartXianLiaoLogin() {if (ccActivity != null) {ccActivity.xianLiaoLogin();}}15).添加函数StartShareTextToXLpublic static void StartShareTextToXL(String path) {if (ccActivity != null) {ccActivity.xlShareText(path);}}16).添加函数StartShareInviteGameToXLpublic static void StartShareInviteGameToXL(String roomId,String roomToken, String title, String description) {if (ccActivity != null) {ccActivity.xlShareInviteGame(roomId, roomToken, title, description);}}17).添加函数StartShareTextureToXLpublic static void StartShareTextureToXL(String path) {if (ccActivity != null) {ccActivity.xlShareTexture(path);}}18).添加函数xlGetInviteGameInfopublic static void xlGetInviteGameInfo(){if (ccActivity != null) {ccActivity.GetXLInviteGameInfo();}}19).在AndroidManifest.xml中添加<!-- xianliao --><activity android:name="org.cocos2dx.javascript.XianLiaoActivity"android:screenOrientation="sensorLandscape"android:configChanges="orientation"android:theme="@android:style/Theme.NoTitleBar.Fullscreen"><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="paraches"android:host="xianliao*******闲聊审核获得的APPID*****"/></intent-filter></activity><activityandroid:name="com.happyplay.hnmj.sgapi.SGEntryActivity"android:exported="true"></activity>二、JS篇1.在app.js中修改函数jsclient.logout,在函数中添加以下内容jsclient.logout = function () {if (jsclient.remoteCfg.httpLogin) {sys.localStorage.removeItem("WX_USER_LOGIN");sys.localStorage.removeItem("XL_USER_LOGIN");sys.localStorage.removeItem("LoginType");sys.localStorage.removeItem("loginData");sendEvent("logout");}else {jsclient.block();jsclient.gamenet.request("pkcon.handler.logout", {},function () {sys.localStorage.removeItem("WX_USER_LOGIN");sys.localStorage.removeItem("XL_USER_LOGIN");sys.localStorage.removeItem("LoginType");sys.localStorage.removeItem("loginData");sendEvent("logout");jsclient.unblock();});}};2.在app.js中添加函数getWXunionidjsclient.getWXunionid = function () {var unionid = "";var WX_USER_LOGIN = sys.localStorage.getItem("WX_USER_LOGIN");if(WX_USER_LOGIN){WX_USER_LOGIN = JSON.parse(WX_USER_LOGIN);unionid = WX_USER_LOGIN.unionid;}return unionid;};3.在app.js中添加函数operateFirstLoginTypejsclient.operateFirstLoginType = function (type) {if(!type){var loginType = sys.localStorage.getItem("LoginType");if(loginType){return loginType;}}else {if(type) {sys.localStorage.setItem("LoginType", type);return type;}elsereturn null;}};4.在app.js中添加函数doInviteGameInfojsclient.doInviteGameInfo = function (para) {if(!para){return;}//玩家还未登陆if (jsclient.loginui) {jsclient.showMsgDelay(0.2,"请先登陆游戏后再次点击游戏约局信息!");}//玩家已经登录-未在房间内else if (!jsclient.data.sData) {jsclient.joinGame(para.roomId, para.roomToken.gameType);}//玩家已经登录-在房间内else if (jsclient.data.sData) {var sData = jsclient.data.sData;var tData = sData.tData;var xl_type = para.roomToken.gameType;var xl_roomid = para.roomId;var pp_type = sData.gameid;var pp_roomid = tData.tableid;if(xl_type!=pp_type || xl_roomid!=pp_roomid){jsclient.showMsgDelay(0.2, "您现在已经在游戏中,请先退出当前房间后再次点击游戏约局信息!");}}};5.在app.js中添加函数xlCheckAndSharejsclient.xlCheckAndShare = function () {//检查是否进行过闲聊授权(此处为第二处可以关联微信、闲聊、皮皮账号的地方),如果没有就进行闲聊授权登录var XL_USER_LOGIN = sys.localStorage.getItem("XL_USER_LOGIN");if(!XL_USER_LOGIN){if (jsclient.native)jsclient.native.xlLogin();return;}//进行函数调用if(jsclient.xianLiaoPara){var para = jsclient.xianLiaoPara;if(para.type == XianLiaoType.text){ //文本var text = para.text;jsclient.native.xlShareText(text);}else if(para.type == XianLiaoType.image){ //图片jsclient.native.xlShareImage();}else { //游戏邀请var roomId = para.roomId;var roomToken = para.roomToken;var title = para.title;var description = para.description;jsclient.native.xlInviteGame(roomId,roomToken,title,description);}}};6.在app.js中添加函数showMsgDelayjsclient.showMsgDelay = function (delay, msg, yesfunc, nofunc, style) {if (jsclient.Scene) {jsclient.Scene.scheduleOnce(function () {jsclient.showMsg(msg, yesfunc, nofunc, style);},delay);}};7.在app.js中的CallBack中的initSceneData消息中添加xlGetInviteGameInfo的函数调用initSceneData: [0, function (d) {......if (d.tData.roundNum <= -2) {......}else {......jsclient.native.xlGetInviteGameInfo();}}],8.在app.js中的JSScene的jsBind中的loginOK消息中添加xlGetInviteGameInfo的函数调用loginOK: function (rtn) {......if (rtn.vipTable > 0) {......}else {......jsclient.native.xlGetInviteGameInfo();}},9.在app.js中的JSScene的jsBind中添加XL_InviteGameInfo消息XL_InviteGameInfo: function (para) {jsclient.doInviteGameInfo(para);},10.在app.js中的jsclient.native中添加xlLogin函数xlLogin: function () {try {if (cc.sys.OS_ANDROID == cc.sys.os) {jsb.reflection.callStaticMethod("org.cocos2dx.javascript.AppActivity", "StartX ianLiaoLogin", "()V");}else if (cc.sys.OS_IOS == cc.sys.os) {jsb.reflection.callStaticMethod("AppController", "sendXLRequest");}} catch (e) {jsclient.native.HelloOC("xianLiaoLogin throw: " + JSON.stringify(e));}},11.在app.js中的jsclient.native中添加xlInviteGame函数xlInviteGame:function (roomId,roomToken,title,description) {try {if (cc.sys.OS_ANDROID == cc.sys.os) {jsb.reflection.callStaticMethod("org.cocos2dx.javascript.AppActivity","StartShareInviteGameToXL","(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;) V",roomId, roomToken, title, description);}else if (cc.sys.OS_IOS == cc.sys.os) {jsb.reflection.callStaticMethod("AppController","xlShareInvite:AndID:AndTitle:AndText:",roomToken,roomId,title,description);}} catch (e) {jsclient.native.HelloOC("XLInviteGame throw: " + JSON.stringify(e));}},12.在app.js中的jsclient.native中添加xlShareImage函数xlShareImage:function () {try {var writePath = jsb.fileUtils.getWritablePath();var textrueName = "wxcapture_screen.png";if (cc.sys.OS_ANDROID == cc.sys.os) {jsb.reflection.callStaticMethod("org.cocos2dx.javascript.AppActivity","StartShareTextureToXL","(Ljava/lang/String;)V",writePath + textrueName);}else if (cc.sys.OS_IOS == cc.sys.os) {var writePath = jsb.fileUtils.getWritablePath();var textrueName = "wxcapture_screen.png";jsb.reflection.callStaticMethod("AppController","xlShareImage:",writePath + textrueName);}} catch (e) {jsclient.native.HelloOC("XLShareImage throw: " + JSON.stringify(e));}},13.在app.js中的jsclient.native中添加xlShareText函数xlShareText:function (text) {try {if (cc.sys.OS_ANDROID == cc.sys.os) {jsb.reflection.callStaticMethod("org.cocos2dx.javascript.AppActivity","StartShareTextToXL","(Ljava/lang/String;)V",text);}else if (cc.sys.OS_IOS == cc.sys.os) {jsb.reflection.callStaticMethod("AppController","xlShareText:AndText:","【四方河南麻将】",text);}} catch (e) {jsclient.native.HelloOC("xlShareText throw: " + JSON.stringify(e));}},14.在app.js中的jsclient.native中添加xlGetInviteGameInfo函数xlGetInviteGameInfo:function () {......try {if (cc.sys.OS_ANDROID == cc.sys.os) {jsb.reflection.callStaticMethod("org.cocos2dx.javascript.AppActivity", "xlGetI nviteGameInfo", "()V");}else if (cc.sys.OS_IOS == cc.sys.os) {jsb.reflection.callStaticMethod("AppController", "xlGetInviteGameInfo");}} catch (e) {jsclient.native.HelloOC("xlGetInviteGameInfo throw: " + JSON.stringify(e));}},15.在Login.js中添加变量xlLoginPara = {};16.在Login.js中的f_login函数中添加:if(eSugram){eSugram = eSugram;loginData.xl_unionid = xlLoginPara.xl_unionid;loginData.xl_nickname = xlLoginPara.xl_nickname;loginData.xl_headimgurl = xlLoginPara.xl_headimgurl;}17.在Login.js中修改函数autoLoginjsclient.autoLogin = function () {jsclient.block();var type = jsclient.operateFirstLoginType();var beginLogin = false;mylog("判断是否可以进行闲聊或者微信的自动登录type:" + type);if (type == "wx") {mylog("开始进行微信自动登录...");var WX_USER_LOGIN = sys.localStorage.getItem("WX_USER_LOGIN");if (WX_USER_LOGIN) {mylog("微信自动登录...");WX_USER_LOGIN = JSON.parse(WX_USER_LOGIN);LoginAsWeChat(WX_USER_LOGIN);beginLogin = true;}}else if (type == "xl") {mylog("开始进行闲聊自动登录...");var XL_USER_LOGIN = sys.localStorage.getItem("XL_USER_LOGIN");if (XL_USER_LOGIN) {mylog("闲聊自动登录...");XL_USER_LOGIN = JSON.parse(XL_USER_LOGIN);//mylog("XL_USER_LOGIN info:" + XL_USER_LOGIN);//闲聊登录信息初始化eSugram = true;xlLoginPara.xl_unionid = XL_USER_LOGIN.openId;xlLoginPara.xl_nickname = XL_USER_LOGIN.nickName;xlLoginPara.xl_headimgurl = XL_USER_LOGIN.smallAvatar;//闲聊登录f_login(xlLoginPara);beginLogin = true;}}else {mylog("开始进行loginData自动登录...");loginData = sys.localStorage.getItem("loginData");if (loginData) {mylog("loginData自动登录...");loginData = JSON.parse(loginData);f_login(loginData.mail, loginData.code);beginLogin = true;}}//在不能自动登录的时候去判断并执行是否是从游戏邀请链接启动的游戏if (!beginLogin) {jsclient.native.xlGetInviteGameInfo();}};18.在Login.js中LoginLayer的wechatLogin事件中添加:在login.js里自己定义一个var iswxLogin = false;_click: function (btn, etype) {if (agreeNode.isSelected()) {//点击微信登录就清除闲聊的登录信息(保证点什么登录游戏内就是该登录方式的信息)xlLoginPara = {};if (jsclient.native){iswxLogin = true;jsclient.native.wxLogin();}elseLoginAsGuest();}},19.在Login.js中LoginLayer添加按钮xianLiaoLogin的事件xianLiaoLogin: {_visible: function () {if (cc.sys.OS_WINDOWS == cc.sys.os || jsclient.remoteCfg.guestLogin /*|| jscl ient.sdk_control.xianliao*/) {return false;}else {return true;}},_run: function () {doLayout(this, [0.6, 0.13], [0.5, 0.5], [1.2, -2]);},_click: function () {mylog("点击闲聊登录");if (jsclient.native)jsclient.native.xlLogin();}},20.在Login.js中_event内添加XL_USER_LOGIN的事件响应XL_USER_LOGIN:function (para) {mylog("接收到XL_USER_LOGIN数据");jsclient.unblock();if (para) {//保存闲聊登录数据到本地var para = para.data;mylog("开始设置本地XL_USER_LOGIN...");cc.loader.loadTxt(jsb.fileUtils.getWritablePath() + "XLNickName.txt",function (er, txt) {if (txt) {//重置闲聊昵称para.nickName = escape(txt);//设置大头像信息为“”para.originalAvatar = "";//para.smallAvatar = "";//存储闲聊信息//sys.localStorage.setItem("XL_USER_LOGIN", JSON.stringify(par a));jsclient.operateFirstLoginType("xl");//闲聊登录信息初始化eSugram = true;xlLoginPara.xl_unionid = para.openId;xlLoginPara.xl_nickname = para.nickName;xlLoginPara.xl_headimgurl = para.smallAvatar;//闲聊登录mylog("开始进行闲聊登录...");f_login(xlLoginPara);}});}},21.在Login.js中_event内添加XL_LOGIN_MSG的事件响应XL_LOGIN_MSG:function (para) {if(para.errMsg){switch (para.errMsg){case "ERR_SUCCESS": //授权成功jsclient.block();break;case "ERR_CANCEL": //授权登录取消break;case "ERR_FAIL": //授权登录失败break;case "ERR_UNKNOW": //未知错误break;case "ERR_AFTERGETCODE": //获取code之后出错jsclient.unblock();break;}}},22.在Login.js中_event的WX_USER_LOGIN响应事件内添加WX_USER_LOGIN: function (para) {if (para.openid) {cc.loader.loadTxt(jsb.fileUtils.getWritablePath() + "nickname.txt",function (er, txt) {if (txt) {para.nickname = escape(txt);//sys.localStorage.setItem("WX_USER_LOGIN", JSON.stringify(par a));//jsclient.operateFirstLoginType("wx");//新的写法if(iswxLogin){sssys.localStorage.setItem("WX_USER_LOGIN",JSON.stringify(para));jsclient.operateFirstLoginType("wx");}LoginAsWeChat(para);}});}},23.在Login.js中_event的loginRtn响应事件内添加loginRtn: function (rtn) {if (rtn.result == ZJHCode.Success) {if (code) cc.sys.localStorage.setItem("loginData", JSON.stringify(loginData));var loginType = jsclient.operateFirstLoginType();if(loginType == "xl"){// mylog("登录成功2222!!!!!!!");var para = {};para.openId = xlLoginPara.xl_unionid;para.nickName = xlLoginPara.xl_nickname;para.smallAvatar = xlLoginPara.xl_headimgurl;sys.localStorage.setItem("XL_USER_LOGIN", JSON.stringify(para));...}}......else if(rtn.result == ZJHCode.needWxRegister){//需要微信登录if (agreeNode.isSelected()) {if (jsclient.native){iswxLogin = false;jsclient.native.wxLogin();}}}else if(rtn.result == ZJHCode.needWxId){//需要微信idjsclient.showMsg("微信id缺失!")}else if(rtn.result == ZJHCode.needXlId){//需要闲聊idjsclient.showMsg("闲聊id缺失!")}else if(rtn.result == ZJHCode.bindAnotherWxUser){//闲聊账号绑定了另外的微信idjsclient.showMsg("此微信账号不是您的闲聊账号所绑定的微信账号,请登录正确的微信账号!")}else if(rtn.result == ZJHCode.bindAnotherXlUser){//微信账号绑定了另外的闲聊idjsclient.showMsg("此闲聊账号不是您的微信账号所绑定的闲聊账号,请登录正确的闲聊账号!")}if (unblock)jsclient.unblock();}24.在Login.js中ctor函数内添加xlLoginPara = {};25.在myRooms.js中的Button_invite的点击事件中添加:Button_invite: {_click: function () {......//设置闲聊的parajsclient.xianLiaoPara = {};jsclient.xianLiaoPara.type = XianLiaoType.invite;jsclient.xianLiaoPara.roomId = info.tableid;jsclient.xianLiaoPara.roomToken = "{'gameType':'henmj'}";jsclient.xianLiaoPara.title = jsclient.uiPara.title;jsclient.xianLiaoPara.description = jsclient.uiPara.desc;......}},26.在Play.js中的邀请按钮的点击事件中添加:wxinvite: {......_click: function () {......//设置闲聊的parajsclient.xianLiaoPara = {};jsclient.xianLiaoPara.type = XianLiaoType.invite;jsclient.xianLiaoPara.roomId = tData.tableid;jsclient.xianLiaoPara.roomToken = "{'gameType':'henmj'}";jsclient.xianLiaoPara.title = jsclient.uiPara.title;jsclient.xianLiaoPara.description = jsclient.uiPara.desc;......}},27.在resource.js中添加:var XianLiaoType = {text:1, //文本分享image:2, //图片分享invite:3 //游戏邀请};jsclient.xianLiaoPara = {};28.在Result.js中添加:needWxId: 13, // 需要微信idneedXlId: 14, // 需要闲聊idbindAnotherWxUser: 15, // 闲聊账号绑定了另外的微信idbindAnotherXlUser: 16,needWxRegister: 17, // 需要微信注册29.在Update.js的ShareWXLayer中添加一个控件btn_xianliaobtn_xianliao: {_run: function () {......},_click: function () {jsclient.xlCheckAndShare();}}30.在Update.js的ShareWXLayer中的_event添加XL_USER_LOGINXL_USER_LOGIN:function (para) {jsclient.unblock();if(para){//保存闲聊登录数据到本地var para = para.data;cc.loader.loadTxt(jsb.fileUtils.getWritablePath() + "XLNickName.txt",function (er, txt) {if (txt) {//重置闲聊昵称para.nickName = escape(txt);//设置大头像信息为“”para.originalAvatar = "";//para.smallAvatar = "";//存储闲聊信息//sys.localStorage.setItem("XL_USER_LOGIN", JSON.stringify(par a));//绑定账号var unionid = jsclient.getWXunionid();jsclient.gamenet.request("pkcon.handler.bindSugramUser",{unionid: unionid,xl_unionid: para.openId},function (rtn) {if(rtn.result == ZJHCode.Success) {//存储闲聊信息sys.localStorage.setItem("XL_USER_LOGIN", JSON. stringify(para));jsclient.xlCheckAndShare();}else if(rtn.result == ZJHCode.needWxId){//需要微信idjsclient.showMsg("微信id缺失!")}else if(rtn.result == ZJHCode.needXlId){//需要闲聊idjsclient.showMsg("闲聊id缺失!")}else if(rtn.result == ZJHCode.bindAnotherWxUser){//闲聊账号绑定了另外的微信idjsclient.showMsg("此微信账号不是您的闲聊账号所绑定的微信账号,请登录正确的微信账号!")}else if(rtn.result == ZJHCode.bindAnotherXlUser){//微信账号绑定了另外的闲聊idjsclient.showMsg("此闲聊账号不是您的微信账号所绑定的闲聊账号,请登录正确的闲聊账号!")}});}});}},31.在Update.js的ShareWXLayer中的_event添加XL_LOGIN_MSGXL_LOGIN_MSG:function (para) {if(para.errMsg){switch (para.errMsg){case "ERR_SUCCESS": //授权成功jsclient.block();break;case "ERR_CANCEL": //授权登录取消break;case "ERR_FAIL": //授权登录失败break;case "ERR_UNKNOW": //未知错误break;case "ERR_AFTERGETCODE"://获取code之后出错jsclient.unblock();break;}}},32.在Update.js的ShareWXLayer中的_event添加XL_SHARE_MSGXL_SHARE_MSG:function (para) {if(para.errMsg){switch (para.errMsg){case "ERR_SUCCESS": //分享成功break;case "ERR_CANCEL": //分享取消break;case "ERR_FAIL": //分享失败break;case "ERR_UNKNOW": //未知错误break;}}},三、IOS篇1.在xcode中添加SugramApi.a、SugramApiManager.h、SugramApiObject.h三个文件2.在AppController.h中添加#import "xlSDK/SugramApiManager.h"#import "xlSDK/SugramApiObject.h"NSString * xl_access_token;NSString * xl_refresh_token;NSString * xl_openid;添加位置如下图:3.在AppController.mm中声明变量NSString * XL_AppID = @"cc93e2b4-4acb-400b-81fe-915ed5d6f7c1";NSString * XL_AppSecret = @"c8c7ceb3-cd08-40e3-85be-39d0592ed808";NSString * xl_access_token;NSString * xl_refresh_token;NSString * xl_openid;BOOL isAPPNewStart = true;std::string inviateMsgStr = "";4.在AppController.mm中didFinishLaunchingWithOptions中添加//注册闲聊[SugramApiManager registerApp:XL_AppID];//是否为闲聊版本cocos2d::FileUtils::getInstance()->writeStringToFile("control",cocos2d::FileUtils::getInstance() ->getWritablePath()+"/xianliao.txt");//注册从闲聊跳转过来的游戏调用,注册了以后从Sugram调起你的游戏APP时会以下的block,如果重复执行这个方法,会执行最后注册的block[SugramApiManager getGameFromSugram:^(NSString *roomToken, NSString *roomId, N SNumber *openId) {NSString *gameString0 = [NSString stringWithFormat:@"roomToken:%@,roomId:% @,openId:%@", roomToken, roomId, openId];NSString *gameString = [NSString stringWithFormat:@"{roomToken:%@,roomId:%@} ", roomToken, roomId];if(![roomToken isEqual: @""] && ![roomId isEqual: @""]){if(gameString){dispatch_async(dispatch_get_main_queue(), ^{std::string result_c_str= [gameString cStringUsingEncoding: NSUTF8St ringEncoding];std::string event ="XL_InviteGameInfo";std::string funName ="cc.eventManager.dispatchCustomEvent";std::string rStr = funName + "(\"" + event + "\"," + result_c_str + ");";if(!isAPPNewStart){NSString *printStr = [NSString stringWithCString:rStr.c_str() enco ding:[NSString defaultCStringEncoding]];NSLog(@"printStr:%@",printStr);ScriptingCore::getInstance()->evalString(rStr.c_str());NSLog(@"已发送闲聊邀请信息(已启动应用)。
sdk安装教程
以下是SDK安装的步骤:
1.首先,打开官方网站并下载最新版本的SDK安装程序。
2.双击运行下载的安装程序,等待安装程序加载。
3.在安装向导中,选择要安装的SDK的目标位置。
通常情况下,建议选择默认位置。
4.接下来,选择要安装的组件。
根据您的需求,可以选择安装所有组件或只选择特定的组件。
5.在设置完成后,点击“安装”按钮开始安装进程。
这可能需要一些时间,具体取决于您的计算机性能和SDK的大小。
6.安装完成后,您将获得一个安装成功的消息。
7.接下来,为了将SDK集成到开发环境中,您需要配置相应的环境变量。
打开控制面板并点击“系统和安全”>“系统”,然后在左侧菜单中选择“高级系统设置”。
8.在弹出的窗口中,点击“环境变量”按钮,在“系统变量”下找到“Path”变量,并点击“编辑”。
9.在编辑系统变量窗口中,点击“新建”,然后输入SDK安装目录的路径。
例如,如果您的SDK安装在“C:\Program
Files\SDK”文件夹中,则输入“C:\Program Files\SDK”。
10.点击“确定”保存变更,然后关闭所有窗口。
11.最后,打开您的开发环境,并按照官方文档中提供的指导进行SDK的使用和配置。
请注意,以上步骤是一般的SDK安装过程,具体步骤可能因SDK版本和操作系统的不同而有所差异。
因此,建议在安装之前查阅官方提供的安装文档或参考其它相关资源进行更详细的指导。
sdk接入标准及流程规范## Standard and Process Specification for SDK Integration.### SDK Integration Standards.1. Compatibility.The SDK should be compatible with multiple operating systems and devices. It should be able to seamlessly integrate with various applications and operating systems.2. Security.The SDK must adhere to industry-standard security protocols to ensure user data protection. This includes measures such as encryption, tokenization, and data anonymization.3. Performance.The SDK should be lightweight and efficient to avoid impacting the performance of the host application. It should minimize resource consumption, such as battery life and memory usage.4. Documentation and Support.The SDK must come with comprehensive documentation and support resources for developers. This includes clear and concise guidelines, tutorials, and reference materials. Dedicated technical support should also be available to assist with integration and troubleshooting.5. Customization.The SDK should allow for customization to meet specific business requirements. It should provide configuration options and APIs that enable developers to tailor the SDK's functionality to their needs.### SDK Integration Process.1. Development Environment Setup.Before integrating the SDK, developers should ensure they have the necessary development environment set up. This includes installing the SDK, any dependencies, and the required software tools.2. SDK Initialization.To use the SDK, developers must initialize it within their application. This involves specifying the necessary parameters and configuration settings.3. Data Collection and Processing.The SDK collects and processes data based on the configured settings. It may gather information such as device properties, user behavior, and event logs.4. Event Tracking.The SDK allows developers to track specific events within their application. These events can be customized to capture user interactions, session starts/stops, or errors.5. Data Transmission.Collected data is typically transmitted to a remote server or data warehouse for analysis and processing. The SDK should handle data transmission securely and efficiently.6. Performance Monitoring.Developers should monitor the performance of the SDK to ensure it is not adversely affecting the host application. This includes tracking resource consumption and identifying any potential bottlenecks.7. Updates and Maintenance.As the SDK evolves, developers should regularly update to the latest version to benefit from new features, bugfixes, and security improvements.### Additional Considerations.In addition to the above, consider the followingfactors when integrating an SDK:Cost: Determine any licensing fees or subscription costs associated with the SDK.Data Usage: Understand how the SDK collects and uses user data, and ensure compliance with relevant data protection regulations.Vendor Support: Evaluate the level of support provided by the SDK vendor and its reputation in the industry.## SDK 集成标准及流程规范。
使用SDK实现第三方应用接入
使用SDK实现第三方应用接入指的是在应用开发过程中,利
用Software Development Kit(SDK)软件来开发和实现应用
程序接入功能。
通常情况下,开发人员可以使用SDK工具来
实现一系列的功能,以便搭建应用程序,并在不同的平台和设备上使用也可以使用SDK来接入。
SDK的主要目的是对第三方应用进行接入,即从技术上以及
管理上解决应用与设备之间的通信和接口问题,所以SDK包
括API, SDK工具,文档,样例代码以及其他有用的资源,并
且可以实现数据存储,消息推送,第三方应用接入,用户认证等特性。
使用SDK开发第三方应用接入时,首先要对当前应用程序的
需求进行深入的分析,明确应用的数据模型,根据应用的需求,确定SDK的功能。
然后下载SDK,准备工作,让应用程序支
持SDK,从而实现第三方应用接入功能。
有了SDK,开发人员就可以轻松实现应用程序开发过程中的
第三方接入功能,从而更加有效地利用已有的系统资源,节省自己的时间和财力,完成应用开发任务。
此外,使用SDK也
可以更快的实现应用程序的测试,并能够降低实施的风险。
因此,使用SDK实现第三方应用接入是一个非常有效的方法,
且能够提高应用程序的开发效率。
SDK for Android2014/11/11 1.0.02014/11/14 GPPayResult.GPSDKPayR esultCodeInitFailed2014/11/15initSDK2014/11/24添加mReserved字段2014 12 10 zemin GPMainActivitymanifest2014 12 11 1.0.1zemin2014 12 12 1.0.2zemin2014 12 18 1.0.3zemin2015 1 12 xiaqing2015 1 16 1.0.5xiaqing2015 3 25 1.0.6xiaqing2015 6 15 1.0.7xiaqing2015 07 29 1.0.8zemin1、⽀付流程优化2、添加预下载功能3、添加mo9⽀付渠道2015 09 23 2.0.0zhidong.zhang1、新增浮窗功能2、新增代⾦券功能3、新增微信⽀付2015 10 13 2.0.1zhidong.zhang2015 11 17 2.1.0zhidong.zhang1 新增跨游戏登录功能2 新增切换账号登录功能3 其他功能优化4、简化接⼊⽅法2016 1 12 2.2.0mingshun.tang1、新增游戏⾓⾊信息上报接⼝(⽅便跟进玩家反馈)2、新增vip会员体系,添加⼿机号注册和客服实时聊天3、其他优化1.1SDK SDK1.2Android Android1.3Android2.11 .guopan : com.xx.game (com.xx.game.guopan);2 ICON SDK2016 7 262.3.0mingshun.tang1、新增视频录制,分享功能2、⽀付功能优化,新增果币卡3、其他功能优化2016 9 52.4.0mingshun.tang1、新增福利商城2、其他功能优化2016 11 73.0.0mingshun.tang2 libs gp_android_sdk.jar so libs3 Unity3D jar assetsgp_android_sdk.jar assets assets4 AndroidManifest.xml<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />x<uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.GET_TASKS" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /><uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.VIBRATE" /><uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /><uses-permission android:name="android.webkit.permission.PLUGIN" /><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /><!-- --><uses-permission android:name="android.permission.RECEIVE_SMS" /><uses-permission android:name="android.permission.READ_SMS" /><!-- --><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /><uses-permission android:name="android.permission.RECORD_VIDEO" /><uses-permission android:name="android.hardware.camera.autofocus" /><!-- --><uses-feature android:name="android.hardware.camera" /><!-- bugly --><uses-permission android:name="android.permission.READ_LOGS" /><uses-permission android:name="android.permission.BLUETOOTH"/>5 AndroidManifest.xml <application> , demo<!--- SDK start --><activityandroid:name="com.flamingo.sdk.view.PluginActivity"android:configChanges="orientation|keyboardHidden|screenSize"android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" /><service android:name="com.flamingo.sdk.floatview.api.PluginServiceProxy"></service><!--- SDK end --><!-- start--><serviceandroid:name="com.yintong.secure.service.PayService"android:exported="false" /><!-- end --><!-- --><serviceandroid:name="com.baidu.location.f"android:enabled="true"android:process=":remote"><intent-filter><action android:name="com.baidu.location.service_v2.2"></action></intent-filter></service><activity android:name="com.flamingo.sdk.view.GPSplashActivity"android:configChanges="orientation|keyboardHidden|screenSize"android:theme="@android:style/Theme.NoTitleBar.Fullscreen"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="UNCHER" /></intent-filter></activity><!-- meta-data application --><meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="DhNxS47YIr3CNdocGoAcy1ts" />65 activity<activity android:name="com.flamingo.sdk.view.GPSplashActivity"android:configChanges="orientation|keyboardHidden|screenSize"android:theme="@android:style/Theme.NoTitleBar.Fullscreen"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="UNCHER" /></intent-filter></activity>AndroidManifest.xml activity<intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="UNCHER" /></intent-filter>activity <intent-filter><intent-filter><action android:name="com.flamingo.sdk.MAIN" /><category android:name="android.intent.category.DEFAULT" /></intent-filter>7 proguard-project.text# crash-dontoptimize-dontshrink-dontskipnonpubliclibraryclassmembers-renamesourcefileattribute ProGuard-keepattributes SourceFile,LineNumberTable-printmapping proguard_mapping.txt# SDK-keep class com.flamingo.sdk.** {*;}#keep assets-keep class assets.** {*;}#keep bugly-keep public class com.tencent.bugly.** {*;}2.2 SDKinitSDK initSDK2.2.12.1GPApiFactory+(IGPApi)getApi();+(IGPApi)getApi();IGPApi +(void)initSDK(Context, String, String,IGPSDKInitObsv)SDKDemoMainActivityIGPApi +(void)setLogOpen(boolean)IGPApi+(String)getVersion() sdk2.2.2 2.2 initSDK 1+(void)initSDK(Context, String, String, IGPSDKInitObs) SDKContext contextString appID appIDString appKey appKeyIGPSDKInitObsv obsv 3.12.3IGPApi +(void)login(Context,IGPUserObsv)IGPApi+(boolean)isLogin()IGPApi +(String)getLoginToken()tokentokenIGPApi +(String)getLoginUin() uinuinIGPApi+(String)logout()IGPApi +(String)getAccountName()IGPApi +(void)uploadPlayerInfo(GPSDKPlayerInfo,IGPUploadPlayerInfoObsv)IGPApi +(void)reLogin(Context,IGPUserObsv)2.2.3 2.4 login+(void)login(Context, IGPUserObsv)Context contextIGPUserObsv obsv3.22.5 uploadPlayerInfo+(void)uploadPlayerInfo(GPSDKPlayerInfo, IGPUploadPlayerInfoObsv)GPSDKPlayerInfo gpsdkPlayerInfo IGPUploadPlayerInfoObsv obsv 3.32.6 reLogin+(void)reLogin(Context, IGPUserObsv)Context contextIGPUserObsv obsv 3.22.6IGPApi +(void)buy(GPSDKGamePaymen,IGPPayObsv)2.7 buy+(void)buy(GPSDKGamePaymen, IGPPayObsv)GPSDKGamePayment payParam +String mItemName+String mPaymentDes 2~ 1000+float mItemPrice+float mItemOrigPrice 0+String mItemId id+int mItemCount 1+String mSerialNumber 32+Activity mCurrentActivity activity+String mReserved ⾮必须填,SDK不处理该字段,保留原字段传递到游戏服务器+String mPlayerId⾓⾊id+String mPlayerNickName ⽤户⾓⾊名+String mServerId服务器id(多少服)+String mServerName服务器名(什么服)+float mRate游戏道具和⼈民币的⽐率(⽐如10个钻⽯只需要1元,那么就是10)IGPPayObsv obsv 3.42.2.42.2.5 2.8IGPApi +(void)exit(IGPExitObsv)2.8 exit+(void)exit(IGPExitObsv)IGPExitObsv3.52.9IGPApi +(void)onNewIntent(Activity)ActivityonNewIntentIGPApi +(void)onActivityResult(Activity, int, int, Intent)ActivityonActivityResultIGPApi +(void)onCreate(Activity)ActivityonCreate2.2.63.1IGPApi+(void)onDestroy(Activit y)Activity onDestroyIGPApi+(void)onPause(Activity )Activity onPauseIGPApi+(void)onRestart(Activit y)Activity onRestartIGPApi+(void)onResume(Activi ty)Activity onResumeIGPApi+(void)onStop(Activity) ActivityonStop2.10+(String)getChannelName()3.1 GPSDKInitResult mInitErrCodeGPSDKInitResult.GPInitErrorCodeNone = 0 GPSDKInitResult.GPInitErrorCodeNet = 1GPSDKInitResult.GPInitErrorCodeConfig = 2appId,secret GPSDKInitResult.GPInitErrorCodeNee dUpdate=33.23.33.43.2 GPUserResult mErrCodeER_RESULT_LOGIN_SUCC = 0ER_RESULT_LOGIN_FAIL = 13.3 GPUploadPlayerInfoResultmResultCodeGPUploadPlayerInfoResult.GPSDKUploadSucc ess = 0GPUploadPlayerInfoResult.GPSDKUploadFail= 13.4 GPPayResult mErrCodeGPPayResult.GPSDKPayResultCodeSucceed = 0GPPayResult.GPSDKPayResultCodePayForbi dden = 1GPPayResult.GPSDKPayResultCodeNotEnou gh = 2GPPayResult.GPSDKPayResultCodePayHadFinished = 3GPPayResult.GPSDKPayResultCodeCancel =4GPPayResult.GPSDKPayResultCodeServerError = 5,GPPayResult.GPSDKPayResultCodePayBack ground = 6 appGPPayResult.GPSDKPayResultCodeBackgroundSucceed = 7GPPayResult.GPSDKPayResultCodeBackgroundTimeOut = 8GPPayResult.GPSDKPayResultCodeOtherError = 1000GPPayResult.GPSDKPayResultNotLogined =-1GPPayResult.GPSDKPayResultParamWrong =-2GPPayResult.GPSDKPayResultCodeInitFailed= 100,GPPayResult.GPSDKPay.GPSDKPayResultCo deLoginOutofDate = 93.5 GPExitResult mResultCodeGPExitResult.GPSDKExitResultCodeError = 6打开退出界⾯错误GPExitResult.GPSDKExitResultCodeCloseWindow = 7GPExitResult.GPSDKExitResultCodeExitGame = 1;点击退出游戏。