siki老师,可以吗?
可以的哈,在计划中的
这几天可以吗?我挺着急的,感觉没问题了,但是就是不对,不知道哪里出问题了
是不是unity和android通信实现的,那么在android里面的代码可以启动一个新的线程单独调用
//MainActivity 类 继承unityplayerActivity
public void weiLogin() {
// if (!WXEntryActivity.api.isWXAppInstalled())
// {
// Toast.makeText(MainActivity.this, "请安装微信", Toast.LENGTH_LONG).show();
// return;
// }
WXEntryActivity.loginWeixin(MainActivity.this, MyApplication.sApi,new WXEntryActivity.WeChatCode() {
@Override
public void getResponse(String code) {
// 通过code获取授权口令access_token
getAccessToken(code);
Log.i("获取token成功",code.toString());
// 从手机本地获取存储的授权口令信息,判断是否存在access_token,不存在请求获取,存在就判断是否过期
String accessToken = (String) ShareUtils.getValue(MainActivity.this, WEIXIN_ACCESS_TOKEN_KEY,
"none");
String openid = (String) ShareUtils.getValue(MainActivity.this, WEIXIN_OPENID_KEY, "");
if (!"none".equals(accessToken)) {
// 有access_token,判断是否过期有效
isExpireAccessToken(accessToken, openid);
} else {
// 没有access_token
getAccessToken(code);
Log.i("获取token成功",code.toString());
}
}
});
}
//WXEntryActivity 类 继承 Activity
public static void loginWeixin(Context context,IWXAPI api, WeChatCode wechatCode) {
if (!api.isWXAppInstalled()) {
Toast.makeText(context.getApplicationContext(), "please step up WeChat", Toast.LENGTH_SHORT)
.show();
return;
}
mWeChatCode=wechatCode;
SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "app_wechat";
api.sendReq(req);
}
@Override
public void onReq(BaseReq req) {
switch (req.getType()) {
case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
break;
case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
break;
default:
break;
}
}
@Override
public void onResp(BaseResp resp) {
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
String code = ((SendAuth.Resp) resp).code;
mWeChatCode.getResponse(code);
break;
}
}
public interface WeChatCode {
void getResponse(String code);
}
1、这边闪退是 微信闪退还是开发的游戏闪退
2、这个虽然不是微信登录,但是某些机制一样,你可以看下这个文档
http://blog.csdn.net/rcfalcon/article/details/52518700
可以关注下 sendReq方法并非阻塞Unity线程的,需要使用回调机制 这个内容
看下能否解决
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private static final String WEIXIN_ACCESS_TOKEN_KEY = "wx_access_token_key";
private static final String WEIXIN_OPENID_KEY = "wx_openid_key";
private static final String WEIXIN_REFRESH_TOKEN_KEY = "wx_refresh_token_key";
public static WeChatCode mWeChatCode;
public static IWXAPI api;
public WeChatCode getWeChatCode() {
return mWeChatCode;
}
public void setWeChatCode(WeChatCode weChatCode) {
mWeChatCode = weChatCode;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyApplication.sApi.handleIntent(getIntent(), this);
}
public static IWXAPI initWeiXin(Context context, @NonNull String weixin_app_id) {
if (TextUtils.isEmpty(weixin_app_id)) {
Toast.makeText(context.getApplicationContext(), "weixin_app_id", Toast.LENGTH_SHORT).show();
}
api = WXAPIFactory.createWXAPI(context, weixin_app_id, true);
api.registerApp("weixin_app_id");
return api;
}
//MyApplication
public class MyApplication extends Application {
public static IWXAPI sApi;
public static Context mContext;
@Override
public void onCreate() {
super.onCreate();
mContext=this;
//初始化微信
sApi = WXEntryActivity.initWeiXin(this, AppConst.WEIXIN_APP_ID);
UnityPlayer.UnitySendMessage("Wechat","response","运行了吗?????MyApplication");
initOkHttp();
}
//封装okhttp框架的初始化配置
private void initOkHttp() {
HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(null, null, null);
CookieJarImpl cookieJar = new CookieJarImpl(new PersistentCookieStore(getApplicationContext()));
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new LoggerInterceptor("TAG"))
.cookieJar(cookieJar)
.connectTimeout(20000L, TimeUnit.MILLISECONDS)
.readTimeout(20000L,TimeUnit.MILLISECONDS)
.writeTimeout(20000L,TimeUnit.MILLISECONDS)
.sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)
//其他配置
.build();
OkHttpUtils.initClient(okHttpClient);
}
}