微信分享的两个问题

来源:互联网 发布:火狐不支持java 编辑:程序博客网 时间:2024/05/18 02:23

最近在做一个简单的微信分享功能,中间遇到了两个问题:

1.微信回调问题:

要想获取微信分享的结果,必须在自己的项目下新建包名wxapi,新建WXEntryActivity(名字必须是这个)实现IWXAPIEventHandler接口,重写onResop()方法。如下:

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
...
 @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.entry);//         通过WXAPIFactory工厂,获取IWXAPI的实例        api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);        api.handleIntent(getIntent(), this);    }

@Overridepublic void onReq(BaseReq req) {}
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法@Overridepublic void onResp(BaseResp resp) {

}

微信会自动回调onResop()方法。微信demo里的代码是这样的:

public void onResp(BaseResp resp) {        int result = 0;        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;            default:                result = R.string.errcode_unknown;                break;        }        Toast.makeText(this, result, Toast.LENGTH_LONG).show();        finish();    }

然而手贱的我委屈在switch{}前面加了两行log打印,虽然会执行方法,但是log打印完就不往下执行,直接跳到onCreate()中的api.handleIntent(getIntent(), this)这行。

最后把那两行打印删除之后就好了。

什么原因我也不太清楚,还请知道的大神帮我解答一下大笑……

2.在app的activity中点击分享给好友调出微信好友选择界面后直接点击返回键导致app刚才所处的那个activity也被finish。

这个发现是back键的ACTION-UP事件传递到了app的activity中,结果就悲剧了……

我们可以在这个activity中重写onKeyUp()方法:

@Overridepublic boolean onKeyUp(int keyCode, KeyEvent event) {    return true;}

以上两个问题是我在做的时候遇到的,写下来以防自己以后再遇到这些问题,也希望能帮助到一些小伙伴。

如果有知道出现这两个问题原因或者有更好解决办法的大神,还请不吝指教!谢谢!大笑

———————————————————————————————————————————————————

分割线

———————————————————————————————————————————————————

之前没有管过这个,偶然发现的,在分享时有一个生成唯一标识的方法,刚开始也不了解这个有什么用,如下:

private String buildTransaction(final String type) {    return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();}
在分享时会调用这个方法,将返回值作为 SendMessageToWX.Req对象req的一个属性值,即:

req.transaction = buildTransaction("text");
后来才知道,这个标识text和WXEntryActivity的onResp(BaseResp resp)方法中的resp对象中的transaction属性值是对应的:

// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法@Overridepublic void onResp(BaseResp resp) {    int result = 0;    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;        default:            result = R.string.errcode_unknown;            break;    }    Toast.makeText(this, result, Toast.LENGTH_LONG).show();    
Log.i("transaction", resp.transaction);
    }}

打印出来的值即是之前设置的text+用户点击分享时所对应时间的毫秒数。

——————————————————————————————————————————————————

20160822

后来又发现了一个微信分享的问题。

由于分享到朋友圈的操作要微信4.2以后的版本才支持,所以在分享前会做微信版本的检查。但是在安卓6.0系统上,会获取不到正确的版本号(获取到的好像是0吧)。我自己在写的时候遇到了这个问题,然后在大众点评上偶然也发现了这个问题(大众点评应该用的JS_SDK)。不知道这是不是微信分享的一个bug呢……疑问


                                             
0 0
原创粉丝点击