教你高速高效接入SDK——Unity统一接入渠道SDK(Android篇)
public class U8UnityContext extends UnityPlayerActivity{
public final static String CALLBACK_GAMEOBJECT_NAME = "(u8sdk_callback)"; //unity中接收回调通知的GameObject的名称
public final static String CALLBACK_INIT = "OnInitSuc"; //SDK初始化成功的回调方法名称和Unity中一致
public final static String CALLBACK_LOGIN = "OnLoginSuc"; //SDK登录成功的回调方法名称和Unity中一致
public final static String CALLBACK_SWITCH_LOGIN = "OnSwitchLogin"; //SDK切换帐号的回调方法名称和Unity中一致
public final static String CALLBACK_LOGOUT = "OnLogout"; //SDK登出的回调方法名称和Unity中一致
public final static String CALLBACK_PAY = "OnPaySuc"; //SDK支付成功回调方法名称和Unity中一致
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initSDK();
}
//U8SDK 初始化
public void initSDK(){
U8SDK.getInstance().setSDKListener(new UnityU8SDKListener(this));
U8SDK.getInstance().init(this);
U8SDK.getInstance().onCreate();
}
//登录接口
public void login(){
U8SDK.getInstance().runOnMainThread(new Runnable() {
@Override
public void run() {
U8User.getInstance().login();
}
});
}
//自己定义登录接口
public void loginCustom(final String customData){
U8SDK.getInstance().runOnMainThread(new Runnable() {
@Override
public void run() {
U8User.getInstance().login(customData);
}
});
}
//切换帐号接口
public void switchLogin(){
U8SDK.getInstance().runOnMainThread(new Runnable() {
@Override
public void run() {
U8User.getInstance().switchLogin();
}
});
}
//显示用户中心接口
public void showAccountCenter(){
U8SDK.getInstance().runOnMainThread(new Runnable() {
@Override
public void run() {
U8User.getInstance().showAccountCenter();
}
});
}
//登出
public void logout(){
U8SDK.getInstance().runOnMainThread(new Runnable() {
@Override
public void run() {
U8User.getInstance().logout();
}
});
}
//提交扩展数据
public void submitExtraData(String data){
final UserExtraData extraData = parseGameData(data);
U8SDK.getInstance().runOnMainThread(new Runnable() {
@Override
public void run() {
U8User.getInstance().submitExtraData(extraData);
}
});
}
//SDK退出接口
public void exit(){
U8SDK.getInstance().runOnMainThread(new Runnable() {
@Override
public void run() {
U8User.getInstance().exit();
}
});
}
//支付接口
public void pay(String data){
final PayParams params = parsePayParams(data);
U8SDK.getInstance().runOnMainThread(new Runnable() {
@Override
public void run() {
U8Pay.getInstance().pay(params);
}
});
}
//SDK是否支持退出确认功能
public boolean isSupportExit(){
return U8User.getInstance().isSupport("exit");
}
//SDK是否支持用户中心
public boolean isSupportAccountCenter(){
return U8User.getInstance().isSupport("showAccountCenter");
}
//SDK是否支持登出
public boolean isSupportLogout(){
return U8User.getInstance().isSupport("logout");
}
//向Unity中发送消息
public void sendCallback(String name, String jsonParams){
if(jsonParams == null){
jsonParams = "";
}
UnityPlayer.UnitySendMessage(CALLBACK_GAMEOBJECT_NAME, name, jsonParams);
}
private UserExtraData parseGameData(String str){
UserExtraData data = new UserExtraData();
try {
JSONObject json = new JSONObject(str);
data.setDataType(json.getInt("dataType"));
data.setRoleID(json.getString("roleID"));
data.setRoleName(json.getString("roleName"));
data.setRoleLevel(json.getString("roleLevel"));
data.setServerID(json.getInt("serverID"));
data.setServerName(json.getString("serverName"));
data.setMoneyNum(json.getInt("moneyNum"));
} catch (JSONException e) {
e.printStackTrace();
}
return data;
}
private PayParams parsePayParams(String str){
PayParams params = new PayParams();
try{
JSONObject json = new JSONObject(str);
params.setProductId(json.getString("productId"));
params.setProductName(json.getString("productName"));
params.setProductDesc(json.getString("productDesc"));
params.setPrice(json.getInt("price"));
params.setRatio(0);//该字段废弃不用
params.setBuyNum(json.getInt("buyNum"));
params.setCoinNum(json.getInt("coinNum"));
params.setServerId(json.getString("serverId"));
params.setServerName(json.getString("serverName"));
params.setRoleId(json.getString("roleId"));
params.setRoleName(json.getString("roleName"));
params.setRoleLevel(json.getInt("roleLevel"));
params.setPayNotifyUrl("");//该字段废弃不用
params.setVip(json.getString("vip"));
params.setOrderID(json.getString("orderID"));
params.setExtension(json.getString("extension"));
}catch(Exception e){
e.printStackTrace();
}
return params;
}
public void onActivityResult(int requestCode, int resultCode, Intent data){
U8SDK.getInstance().onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
public void onStart(){
U8SDK.getInstance().onStart();
super.onStart();
}
public void onPause(){
U8SDK.getInstance().onPause();
super.onPause();
}
public void onResume(){
U8SDK.getInstance().onResume();
super.onResume();
}
public void onNewIntent(Intent newIntent){
U8SDK.getInstance().onNewIntent(newIntent);
super.onNewIntent(newIntent);
}
public void onStop(){
U8SDK.getInstance().onStop();
super.onStop();
}
public void onDestroy(){
U8SDK.getInstance().onDestroy();
super.onDestroy();
}
public void onRestart(){
U8SDK.getInstance().onRestart();
super.onRestart();
}
}
public class UnityU8SDKListener implements IU8SDKListener{
private U8UnityContext context;
private boolean isSwitchAccount = false; //当前是否为切换帐号
public UnityU8SDKListener(U8UnityContext context){
this.context = context;
}
@Override
public void onResult(final int code, String msg) {
// TODO Auto-generated method stub
U8SDK.getInstance().runOnMainThread(new Runnable() {
@Override
public void run() {
switch(code){
case U8Code.CODE_INIT_SUCCESS:
context.sendCallback(U8UnityContext.CALLBACK_INIT, null);
break;
case U8Code.CODE_INIT_FAIL:
Toast.makeText(context, "SDK初始化失败", Toast.LENGTH_SHORT).show();
break;
case U8Code.CODE_LOGIN_FAIL:
//这里不须要提示。一般SDK有提示
//Toast.makeText(context, "SDK登录失败", Toast.LENGTH_SHORT).show();
break;
case U8Code.CODE_PAY_FAIL:
Toast.makeText(context, "支付失败", Toast.LENGTH_SHORT).show();
break;
case U8Code.CODE_PAY_SUCCESS:
Toast.makeText(context, "支付成功,到账时间可能稍有延迟", Toast.LENGTH_SHORT).show();
break;
}
}
});
}
//此接口已经废弃
@Override
public void onInitResult(InitResult result) {
// TODO Auto-generated method stub
// 此接口已经废弃
}
//SDK登录成功的回调
@Override
public void onLoginResult(String data) {
Log.d("U8SDK", "SDK 登录成功,不用做处理,在onAuthResult中处理登录成功, 參数例如以下:");
Log.d("U8SDK", data);
this.isSwitchAccount = false;
tip("SDK登录成功");
}
//切换帐号。须要回到登录界面,并弹出SDK登录界面
@Override
public void onSwitchAccount() {
context.sendCallback(U8UnityContext.CALLBACK_SWITCH_LOGIN, null);
}
//切换帐号,并登录成功。到这里和Login的回调onLoginResult一样
@Override
public void onSwitchAccount(String data) {
Log.d("U8SDK", "SDK 切换帐号并登录成功,不用做处理。在onAuthResult中处理登录成功, 參数例如以下:");
Log.d("U8SDK", data);
this.isSwitchAccount = true;
tip("切换帐号成功");
}
//登出,须要回到登录界面,并弹出SDK登录界面
@Override
public void onLogout() {
context.sendCallback(U8UnityContext.CALLBACK_LOGOUT, null);
}
//SDK登录成功之后。去U8Server进行登录认证
@Override
public void onAuthResult(UToken authResult) {
if(!authResult.isSuc()){
tip("SDK登录认证失败,确认U8Server是否配置");
return;
}
JSONObject json = new JSONObject();
try{
json.put("isSuc", authResult.isSuc());
json.put("isSwitchAccount", isSwitchAccount);
if(authResult.isSuc()){
json.put("userID", authResult.getUserID());
json.put("sdkUserID", authResult.getSdkUserID());
json.put("username", authResult.getUsername());
json.put("sdkUsername", authResult.getSdkUsername());
json.put("token", authResult.getToken());
}
}catch(Exception e){
e.printStackTrace();
}
context.sendCallback(U8UnityContext.CALLBACK_LOGIN, json.toString());
}
//对于手机网游,不须要实现这个接口,由于网游支付是通过server回调通知加虚拟币的。
//这个接口主要用于单机游戏。作为单机的支付结果回调接口
@Override
public void onPayResult(PayResult result) {
//TODO
}
private void tip(final String tip){
U8SDK.getInstance().runOnMainThread(new Runnable() {
@Override
public void run() {
Toast.makeText(context, tip, Toast.LENGTH_SHORT).show();
}
});
}
}
比方Login,switchLogin,logout等。而这些方法本身不过对U8SDK抽象层提供的方法进行了一个简单的包裹。通过,U8SDK.getInstance().runOnMainThread()来让全部的接口都在UI主线程中完毕。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.u8.sdk"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:name="com.u8.sdk.U8Application"> <activity
android:name="com.u8.sdk.U8UnityContext"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:launchMode="singleTask"
android:configChanges="orientation|keyboardHidden|screenSize"> <intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </activity> </application> </manifest>
接下来。我们就须要在Unity中来完毕接下来的工作,能够看訪问这里查看: p=1866">Unity手游接入渠道SDK(Unity篇)
教你高速高效接入SDK——Unity统一接入渠道SDK(Android篇)的更多相关文章
- 手机游戏渠道SDK接入工具项目分享(三)拨开云雾是个坑
一直在纠结是先写框架设计还是先写掉过的坑,最后本这娱乐大众的态度先写掉过的坑让大家乐呵下. 项目开发过程中遇问题无数,回顾下8个大坑照成了项目一定程度上延期甚至返工. 项目一开始几个人把现有3家主流的 ...
- 【Unity游戏开发】SDK接入与集成——小白入门篇
一.简介 通常一款游戏开发到后期,一般都会涉及到第三方SDK的接入与集成,对于不熟悉SDK接入的同学来说,接SDK每次都是云里雾里,而熟悉SDK接入的同学又觉得不断地重复做接入SDK工作这样没有成就感 ...
- unity工程接入Android sdk后真机测试解锁屏后退出的解决
unity工程接入如91.移动支付等Android sdk后,真机运行尤其是在4.0+以上坏境,往往会出现解锁屏后退出的情况,解决办法如下: 可以在AndroidManifest.xml中所有的con ...
- Unity快速接入SDK框架
先把工程源码贴出来: 链接:http://pan.baidu.com/s/1geDhtS3 密码:i0s9 最近接android ios的SDK 已经接了10多个 有点心得 分享一下 如果有更好想法求 ...
- Unity项目接入应用宝SDK实现截图功能
Unity项目接入应用宝SDK实现截图功能 问题由来 点击应用宝悬浮窗 如图所示 左下角有一个截图按钮 需要解决那些问题 截图信息需要由游戏引擎提供 SDK获取截图信息为同步 但是Unity引擎没有提 ...
- unity3d如何快速接入渠道SDK之Unity篇
原文链接: http://bbs.tianya.cn/post-414-53320-1.shtml 首先我们讲一下,为什么要介绍这个插件? 是因为这个插件极大的简化了我对接渠道SDK的工作量,精力和时 ...
- Unity之SDK接入(Unity与Android通信)
首先介绍一点关于Android与unity通信的知识: 完成通信主要靠unity中的class.jar包(在unity的安装目录下). 在unity中调用android的方法: jo.call(&qu ...
- 手机游戏渠道SDK接入工具项目分享(二)万事开头难
一般接到任务后程序员们通常都开始着手进行技术调研了,但我这活是项目负责人.还有一大堆事情要先期准备,没人能帮忙. 一.人力配置 考虑的之前已经有一波人搞了大半年,但没有起色,先期也没有太大人力需求,所 ...
- NOSDK--SDK一键打包及统一接入的实现(前言)
前言 一,一键打包的实现 1.1 shell脚本执行流程介绍 1.2 自动刷新mk文件的脚本介绍 1.3 编译及拷贝资源的脚本介绍 1.4 打包及签名的脚本介绍 1.5 mac下的脚本环境配置及脚本的 ...
随机推荐
- thinkphp的ip地址定位
在WEB应用中,根据IP地址定位和记录相关访问日志也是非常常见的需求,在ThinkPHP中你可以轻松的实现IP地址获取和定位. 获取扩展类库 可以在官网的http://www.thinkphp.cn/ ...
- Python简介和基础入门
1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是一种开发语言,而且已经 ...
- PHP CURL抓取网页 simple_html_dom类
抓取网页数据后 数据录入到discuz中 <?php include('simple_html_dom.php'); function urlText(){ $url = 'http://www ...
- 【转载】cocos2dx 中 Android NDK 加载动态库的问题
原文地址:http://blog.csdn.net/sozell/article/details/10551309 cocos2dx 中 Android NDK 加载动态库的问题 闲聊 最近在接入各 ...
- sql 改字段名
sp_rename '[zErpMini].[dbo].[STK_Stock].Isextension','IsExtened'
- nodejs 中使用 mysql 实现 crud
首先要使用 mysql 就必须要安装 npm install mysql 然后封装 sql 函数 const mySql = require('mysql'); let connection ; le ...
- retrofit post请求多文件,partMap用法
1. APIService 定义注解 @Multipart @POST("cyxx/Feedback/add.do") Observable<ResponseBody> ...
- DB2数据常用指令
************************************************************** 这个只是个人平时总结,如果有更好的欢迎告诉我,一起学习一起成长 ***** ...
- JavaScript图片轮播,举一反三
图片轮播,在一些购物网站上运用的不胜枚举,下面简单介绍一下图片轮播的实现. 如图 <!doctype html> <html lang="en"> < ...
- 【sqli-labs】 less18 POST - Header Injection - Uagent field - Error based (基于错误的用户代理,头部POST注入)
这次username和password都进行了输入校验 但是ip和uagent没有校验 当我们用admin admin登陆成功后,就会一条插入语句 由于程序无条件的信任了浏览器的header信息,那么 ...