一般的SDK登录之后都会返回渠道用户唯一标识,token,渠道,然后客户端接收后用这些数据登录游戏,但是九游的登录成功返回的参数只有一个token,用户标识要去服务端去取,然而这个时候还没有与游戏服务端连接,所以只能通过web获取了。本来我是写在unity里面的, 但是感觉不怎么好,还不如写到SDK端直接在SDK的登录成功给unity传输数据的时候直接发给unity。
创建一个runnable去获取json数据,然后通过handler传输接收获取的数据,在handler里面处理数据,进行逻辑操作就好了:
Runnable runnable = new Runnable() {
@Override
public void run() {
StringBuilder json = new StringBuilder();
try {
URL oracle = new URL(getAccountIdUrl);
//yc是URLConnection对象,oracle.openConnection()返回的是URLConnection对象,赋值给yc。
URLConnection yc = oracle.openConnection();
//BufferedReader缓冲方式文本读取
//InputStreamReader是字节流与字符流之间的桥梁,能将字节流输出为字符流,
//并且能为字节流指定字符集,可输出一个个的字符
BufferedReader in = new BufferedReader(new InputStreamReader(
yc.getInputStream(), "utf-8"));// 防止乱码
String inputLine = null;
while ((inputLine = in.readLine()) != null) {
json.append(inputLine);
}
in.close();
} catch (Exception e) {
Log.d(TAG,e.toString());
}
Message msg = new Message();
Bundle data = new Bundle();
data.putString("data",json.toString());
msg.setData(data);
handler.sendMessage(msg);
Log.d(TAG,"发送"+data.toString());
}
};
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg)
{
super.handleMessage(msg);
Bundle data = msg.getData();
String val = data.getString("data");
Log.d(TAG,"jieshou data" + val);
JSONObject object;
String accountID = "";
int code = 0;
try {
object =JSONObject.parseObject(val);
accountID = object.getString("accountId");
code = object.getInteger("code");
jsonObj.put("code",code);
jsonObj.put("channelUid",accountID);
if (code==1)
{
Send2Unity(gameObjectName,loginCallback,toResultData(Succed,new Entry("data",jsonObj)));
}
else
{
Send2Unity(gameObjectName,loginCallback,toResultData(Fail,new Entry("data",jsonObj)));
}
} catch (Exception e) {
e.printStackTrace();
jsonObj.put("Exception108",e);
Send2Unity(gameObjectName,loginCallback,toResultData(Fail,new Entry("data",jsonObj)));
}
}
};
jsonobject我用的com.alibaba.fastjson.JSONObject;,所以方法不太一样。在九游的登录成功回调里面启动线程,处理完数据就会通知给unity了,完毕。
new Thread(runnable).start();