手游渠道SDK接入中的回调会丢单怎么办?
答案:2 悬赏:60
解决时间 2021-02-10 17:49
- 提问者网友:北故人
- 2021-02-10 03:27
手游渠道SDK接入中的回调会丢单怎么办?
最佳答案
- 二级知识专家网友:堕落奶泡
- 2021-02-10 05:04
每个渠道的技术力量不同,他们的支付接口负载和稳定性都不同,偶尔丢单属于正常,一般渠道都会做循环重发,以确保订单正常
全部回答
- 1楼网友:修女的自白
- 2021-02-10 06:04
对于每个游戏,只需要接入抽象层,而每个渠道sdk的接入,就是该抽象层的一个实现而已。最后通过一键打包工具来完成最后的产出。那么,我们先来看看,游戏怎么来调用这个抽象层。
我们假设我们已经开发了一款游戏,面临上线,需要接入sdk,需要接入uc,当乐,91,360,小米等渠道。因为采用u8 sdk统一接入框架的思想,游戏工程本身不耦合具体的每个渠道sdk,而只是调用u8 sdk抽象层。那么,根据上一篇文章谈到的抽象层,我们就来看看如何调用。
首先,我们用eclipse新建一个android工程,作为我们这个模拟的游戏工程。这里需要说一下,如果你不是直接使用android开发的游戏,而是采用像unity3d,cocos2d等游戏引擎,其接入也是一样的。只是多了一层jni调用。我们新建一个主运行的activity:
[java] view plaincopy
package com.u8.sdk.demo;
import com.u8.sdk.iu8sdklistener;
import com.u8.sdk.loginresult;
import com.u8.sdk.payparams;
import com.u8.sdk.u8sdk;
import com.u8.sdk.components.u8pay;
import com.u8.sdk.components.u8user;
import android.os.bundle;
import android.view.view;
import android.widget.button;
import android.widget.toast;
import android.annotation.suppresslint;
import android.app.activity;
import android.content.intent;
public class mainactivity extends activity {
@override
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
u8sdk.getinstance().setsdklistener(new iu8sdklistener() {
@suppresslint("showtoast")
@override
public void onresult(int arg0, string msg) {
toast.maketext(mainactivity.this, msg, toast.length_short);
}
@suppresslint("showtoast")
@override
public void onloginresult(loginresult loginresult) {
toast.maketext(mainactivity.this, "登录成功,sid:"+loginresult.getsid(), toast.length_short);
}
});
button btn = (button)findviewbyid(r.id.button1);
btn.setonclicklistener(new view.onclicklistener() {
@override
public void onclick(view v) {
pay();
}
});
button btnlogin = (button)findviewbyid(r.id.button2);
btnlogin.setonclicklistener(new view.onclicklistener() {
@override
public void onclick(view v) {
login();
}
});
u8sdk.getinstance().init(mainactivity.this);
}
private void login(){
u8sdk.getinstance().runonmainthread(new runnable() {
@override
public void run() {
u8user.getinstance().login();
}
});
}
private void pay(){
u8sdk.getinstance().runonmainthread(new runnable() {
@override
public void run() {
payparams params = new payparams();
params.setprice(100);
params.setserverid("1");
params.setroleid("1");
u8pay.getinstance().pay(params);
}
});
}
public void onactivityresult(int requestcode, int resultcode, intent data){
u8sdk.getinstance().onactivityresult(requestcode, resultcode, data);
super.onactivityresult(requestcode, resultcode, data);
}
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 void onbackpressed(){
u8sdk.getinstance().onbackpressed();
super.onbackpressed();
}
}
大家可以看到,在我们这个模拟的游戏中,接入sdk抽象层是一件多么easy的事情,就是在oncreate里面进行初始化操作:
[java] view plaincopy
u8sdk.getinstance().init(mainactivity.this);
同时,如我们之前所说,我们是基于监听器模式的设计,我们需要设置一个监听,当具体sdk有状态变更,成功或者失败时,我们可以得到具体的信息:
[java] view plaincopy
u8sdk.getinstance().setsdklistener(new iu8sdklistener() {
@suppresslint("showtoast")
@override
public void onresult(int arg0, string msg) {
toast.maketext(mainactivity.this, msg, toast.length_short);
}
@suppresslint("showtoast")
@override
public void onloginresult(loginresult loginresult) {
toast.maketext(mainactivity.this, "登录成功,sid:"+loginresult.getsid(), toast.length_short);
}
);
其中,onresult在调试的时候,可以做一个toast输出。onloginresult则是渠道sdk登陆成功时的回调。在这里就是需要去做我们之前整个登陆流程里的第四步(u8appid,sid)访问u8 server获取一个接下来登陆认证使用的一个token。
这样,初始化就完毕了。然后,就是在需要调用登陆界面的地方,调用:
[html] view plaincopy
u8user.getinstance().login();
在需要调用支付界面的地方调用:
[html] view plaincopy
u8pay.getinstance().pay(params);
需要注意的是,这些接口需要在ui 线程中调用,所以,我们需要使用u8sdk.getinstance().runonmainthread():
[java] view plaincopy
u8sdk.getinstance().runonmainthread(new runnable() {
@override
public void run() {
u8user.getinstance().login();
}
);
最后,我们需要重写activity相关的系统事件方法,在对应的方法里面,加上u8 sdk对应方法的调用。比如:
[java] view plaincopy
public void onpause(){
u8sdk.getinstance().onpause();
super.onpause();
}
这样,对于我们这个“游戏”来说,就算完成了sdk的接入了。大家可以看到,对于游戏来说,接入是一件很简便的事。它不用考虑后面怎么打包,怎么生成渠道包,怎么管理配置,怎么升级,。。。对于ta,到这里就结束了。
要是还不能解决?
或者你有更多编程开发上的其他问题
你来我们群里说吧
这里是开发者互相学习交流的
有大神
让他们给你解释你的疑问 q un号: 188 168040
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯
• 手机登qq时,显示手机磁盘不足,清理后重新登 |
• 刺客的套装怎么选啊? |