软件:cocoscreator2.0.9,Androidstudio3.2,MiguSDK_28002_1218
咪咕SDK官方下载地址:http://g.10086.cn/open/database/qsd.do?param=931_1_0
接SDK之前要保证cocos的AndroidSDK、NDK环境已经配置好,同时andrstudio的环境也配置好
一、首先我在creator创建了一个简单的测试工程,界面如下图
层级管理器
场景
cocos中调用Androidstudio相关函数
(cocos调用Androidstudio的方式可以查看cocos官方文档,文档官方地址:https://docs.cocos.com/creator/manual/zh/advanced-topics/java-reflection.html)
工程创建完成后,点击构建直到完成
构建完成
二、用Androidstudio打开刚刚构建的Android工程
找到指定路径,如下:
Androidstudio打开工程后,找到咪咕SDK中相应的说明文档,打开,如下图
按照文档操作,我的工程如下
然后按照官方文档修改代码
在build.gradle中添加如下代码(具体信息见官方文档中的常见问题解决办法)
APPactivity类中定义如下函数
一些修改配置完成后,启动夜神模拟器,运行,出现如下界面
首先弹出咪咕首页,之后跳转进自己的主场
单击购买按钮,出现如下界面,说明SDK接入成功
单击取消购买,直接退出程序
最后总结一下我在接sdk中遇到的各种问题以及解决办法
首先是g_string.xml与string.xml内容冲突问题,需要将g_string.xml中与string.xml冲突的内容删除掉,其次是在name后面添加如下内容,如图,不然一直报红
如果出现闪退现象,按照我的解决办法不行的话,请看官方文档中常见问题
我的APPactivity全部代码如下:
private static AppActivity app=null;
private int price;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app=this;
GameInterface.initializeApp(app);
// Workaround in https://stackoverflow.com/questions/16283079/re-launch-of-activity-on-home-button-but-only-the-first-time/16447508
if (!isTaskRoot()) {
// Android launched another instance of the root activity into an existing task
// so just quietly finish and go away, dropping the user back into the activity
// at the top of the stack (ie: the last state of this task)
// Don't need to finish it again since it's finished in super.onCreate .
return;
}
// DO OTHER INITIALIZATION BELOW
SDKWrapper.getInstance().init(this);
}
public String getProcuctString(int pd)
{
String ps = "";
switch(pd)
{
case 10:
ps = "001";
break;
case 15:
ps = "002";
break;
case 20:
ps = "003";
break;
case 30:
ps = "004";
break;
}
return ps;
}
public static void shopbuy(final int pd)
{
app.price = pd;
app.runOnUiThread(new Runnable() {
@Override
public void run() {
String pstr = app.getProcuctString(pd);
System.out.println("start buy product " + pd);
//buyIndex = pd;
//buyResult(1, buyIndex);
//用户在游戏内触发道具购买时,调用该接口发起话费支付。
GameInterface.doBilling(app, 2, pstr,"0123456789012345",
GameInterface.OptionalPayType.PAY_TYPE_OFFLINE, payCallback);
}
});
}
// 计费结果的监听处理,合作方通常需要在收到SDK返回的onResult时,告知用户的购买结果
final static GameInterface.IPayCallback payCallback = new GameInterface.IPayCallback() {
@Override
public void onResult(int resultCode, String billingIndex, Object obj) {
String result = "";
switch (resultCode) {
case BillingResult.SUCCESS:
result = "购买道具:[" + billingIndex + "] 成功!";
app.buyResult(1);
break;
case BillingResult.FAILED:
result = "购买道具:[" + billingIndex + "] 失败!";
app.buyResult(0);
break;
default:
result = "购买道具:[" + billingIndex + "] 取消!";
app.buyResult(0);
break;
}
Toast.makeText(app, result, Toast.LENGTH_SHORT)
.show();
}
};
public void buyResult(final int type){
Log.d("tga", "购买 !!!!!!!!!!!!!!!!!!!!!!!"+type);
if (type == 1){
app.runOnGLThread(new Runnable() {
@Override
public void run() {
Cocos2dxJavascriptJavaBridge.evalString("cc.buyItem.addzuanshi(" + app.price + ")");
//Cocos2dxJavascriptJavaBridge.evalString("cc.dataMgr.vivoInterface()");
}
});
}
else{
app.runOnGLThread(new Runnable() {
@Override
public void run() {
Cocos2dxJavascriptJavaBridge.evalString("cc.buyItem.resultEvent("+type+")");
}
});
}
}
public static void gameExit(int type)
{
app.runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d("取消","取消");
// 移动退出接口,含确认退出UI
// 如果外放渠道(非移动自有渠道)限制不允许包含移动退出UI,可用exitApp接口(无UI退出)
GameInterface.exit(app, new GameInterface.GameExitCallback() {
@Override
public void onCancelExit() {
Toast.makeText(app, "取消退出", Toast.LENGTH_SHORT)
.show();
}
@Override
public void onConfirmExit() {
//sureExitGame();
//_mainActivity.finish();
// 获取当前进程的id
int pid = android.os.Process.myPid();
// 这个方法只能用于自杀操作
android.os.Process.killProcess(pid);
}
});
}
});
}