这几天开了个新项目....在做微信第三方登录这一块,都不知道写过多少次了...想了想应该是信手捏来吧...随便写了下...点击登录...什么情况...为什么没有登录... ..
而且还卡在 WXEntryActivity界面上...报错
MicroMsg.SDK.WXApiImplV10: handleIntent fail, ex = println needs a message
而且 boolean result = api.handleIntent(getIntent(), this); 这个等于 false.... (= =!)
boolean result = api.handleIntent(getIntent(), this);
if (!result) {
finish();
}
到微信官方的文档里...非常非常严格按照他来一遍...emmm还是不行....有毒吧...
看以前的项目的代码研究研究...emmmm....没多少差啊...以前项目能登录...这个项目不能登录...这难道是....上天不想让我好过?
我得百度一下...寻找大家宝贵的意见...
结果发现....同样案例并不多...而且解决方案都没多少效果......
有人说...
api = WXAPIFactory.createWXAPI(this, Global.WX_APP_ID,false); 这句话的false改为true... 试了几百次 哈哈 没效果...哈哈
api = WXAPIFactory.createWXAPI(this, null); // 看微信官方Demo里面注册微信的时候 他竟然传null...那我也试试...
哈哈 不行
又有大佬花时间...分析微信的源码试了试...弄出了曲线救国的方法
这里带上大佬的链接...以便大家学习学习....https://blog.csdn.net/Livart_Corp/article/details/94354236
...试了下
确实可以,安全登陆了.......但是曲线救国.....勉强解决了难关........却也让自己难以心安...所以趁着现在项目加需求....又能多出点开发时间...这就腾出手来.....又试着折腾....
这个得解决...因为项目太依赖微信登录微信分享了....
顺带一提...曲线救国方案...分享可以分享..但是一样报错,进不去onResp(BaseResp resp)
boolean result = api.handleIntent(getIntent(), this); 这个还是等于 false.... (= =!)
这时候...我考虑过...会不会是包名问题...签名问题...可是如果是这个问题的话...曲线救国的写法为什么又成功登陆了...
所以这个问题否决掉....
否决掉不细心配置错的问题...这时候 我们只能试试...会不会是微信缓存问题...
用十几只测试机试了几下...emmm...结果一样...全部卡在...MicroMsg.SDK.WXApiImplV10: handleIntent fail, ex = println needs a message....不是缓存问题...这是代码问题啊.....
那么...会不会是微信开放平台上面填写的数据有问题呢? 我们试一下...改包名...对...改包名...给项目换包名...再签名...再试试
结果一样....哈哈哈...
说真的....不折腾真的不行...真的不行的时候 有时候重写一下 就可以了 你说可气不可气....
-----------------------最后的 解决过程----------------------
删除wxapi整个包....再创建...再重写WXEntryActivity这个类... 以下引用的是官方Demo里面的WXEntryActivity的代码..方便给广大兄弟们用来改造...
你们可以备份下当前wxapi包 然后删除掉 再用下面这个
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
private static String TAG = "MicroMsg.WXEntryActivity";
private IWXAPI api;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e(TAG, "解决微信问题...MicroMsg.SDK.WXApiImplV10: handleIntent fail, ex = println needs a message.");
api = WXAPIFactory.createWXAPI(this, APP_ID, false);
Log.e(TAG, "解决微信问题...这里设置true还是false...都没解决问题");
try {
boolean result = api.handleIntent(getIntent(), this);
Log.e(TAG, "解决微信问题...这里是true还是false... result = " + result);
if (!result) {
Log.e(TAG, "解决微信问题...参数不合法,未被SDK处理,要退出"); //+ this.getPackageName()打印自己包名 确认下是不是填对了
// finish();
}
} catch (Exception e) {
Log.e(TAG, "这个有点恶心...你要报什么错 e = " + e.toString());
e.printStackTrace();
}
Log.e(TAG, "onCreate 结束 ");
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
}
@Override
public void onReq(BaseReq req) {
// finish();
}
@Override
public void onResp(BaseResp resp) {
int result = 0;
Log.e(TAG, "进入 WXEntryActivity onResp 我们要的就是进入这里...以便我们做监听啊 ");
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
// result = R.string.errcode_success;
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
// result = R.string.errcode_cancel;
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
// result = R.string.errcode_deny;
break;
case BaseResp.ErrCode.ERR_UNSUPPORT:
// result = R.string.errcode_unsupported;
break;
default:
// result = R.string.errcode_unknown;
break;
}
// finish();
}
}
<activity
android:name=".wxapi.WXEntryActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="true"
android:launchMode="singleTask">
</activity>
最终也是成功唤起微信...也可以监听onResp(BaseResp resp)....折腾了大半天...还不如重写来的快...哭晕在厕所
废话不多说....进行对比运行...傻瓜式操作.....
找到报错的地方......就是onResp()方法.... 用下面的代码取缔你的onResp... 再运行一次...你会发现...打印了进入...没有MicroMsg.SDK.WXApiImplV10: handleIntent fail, ex = println needs a message
没有错误后.....再把对应功能写上...
@Override
public void onResp(BaseResp resp) {
Log.e(TAG, "进入 onResp");
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
break;
case BaseResp.ErrCode.ERR_UNSUPPORT:
break;
default:
break;
}
// finish();
}