关于微信sdk的注意事项与解决方案

来源:互联网 发布:原油行情软件 编辑:程序博客网 时间:2024/05/04 03:05

不得不说,为了实现一个微信简单的分享功能真的是浪费了我好多的时间,官方的文档说的什么我也不做什么评价,毕竟这个sdk是人家写的,我学习这个sdk的重要方法就是在看那个给的那个官方的demo,就和学习百度云推送一样,我感觉我们要是可以理清了这个demo的基本思路,那么我们就可以简单了利用它来实现自己的东西了。我觉得最好的学习方法就是在原有的基础上面改,毕竟人家那个例子是可以运行的,我们改一点看一点,只要是不改的太多基本就可以完美运行,这样的话看到了自己改动的痕迹,我们学起来也有信心与兴趣!好了废话不多说,我这里只是想说一下关于网页分享的问题,如果学习过微信官方给的demo的话,那么大家就一定会发现那个网页的分享是不可用的,究其根本原因貌似是图片转化上面有点问题,感兴趣的朋友可以去百度或者谷歌一下,就一定会有大神来给我们讲解的!好了,下面我们就来看一下我的这个例子的实现。

毕竟大家都是有Android开发经验的人了,对于布局文件什么的,大家可以随心所欲的实现,还有就是要在libs里面加入微信的sdk,这个例子我做的也是特别好,就不在此班门弄斧了,直接上主代码:

package com.weixinshare.wxapi;import com.tencent.mm.sdk.openapi.BaseReq;import com.tencent.mm.sdk.openapi.BaseResp;import com.tencent.mm.sdk.openapi.IWXAPI;import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;import com.tencent.mm.sdk.openapi.SendMessageToWX;import com.tencent.mm.sdk.openapi.WXAPIFactory;import com.tencent.mm.sdk.openapi.WXMediaMessage;import com.tencent.mm.sdk.openapi.WXWebpageObject;import com.weixintest.R;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.Toast;public class WXEntryActivity extends Activity implements IWXAPIEventHandler{public static final String APP_ID = "wx6a4a9fd0f8322251";// IWXAPI 是第三方app和微信通信的openapi接口    private IWXAPI api;private Button gotoBtn;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.entry);                // 通过WXAPIFactory工厂,获取IWXAPI的实例    api = WXAPIFactory.createWXAPI(this, APP_ID, false);            gotoBtn = (Button) findViewById(R.id.button1);        gotoBtn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {api.registerApp(APP_ID); WXWebpageObject webpage = new WXWebpageObject();webpage.webpageUrl = "http://www.baidu.com";WXMediaMessage msg = new WXMediaMessage(webpage);msg.title = "我的测试";msg.description = "测试微信分享";try{Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.send_img);Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 150, 150, true);bmp.recycle();msg.setThumbImage(thumbBmp);} catch (Exception e){e.printStackTrace();}SendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = String.valueOf(System.currentTimeMillis());req.message = msg;req.scene = SendMessageToWX.Req.WXSceneTimeline;//req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;  api.sendReq(req);}});    }// 微信发送请求到第三方应用时,会回调到该方法@Overridepublic void onReq(BaseReq req) {}// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法@Overridepublic void onResp(BaseResp resp) {String result;switch (resp.errCode) {case BaseResp.ErrCode.ERR_OK:result = "发送成功";break;case BaseResp.ErrCode.ERR_USER_CANCEL:result = "发送取消";break;case BaseResp.ErrCode.ERR_AUTH_DENIED:result = "发送被拒绝";break;default:result = "发送返回";break;}Toast.makeText(this, result, Toast.LENGTH_LONG).show();}
我感觉这具体的语法啥的无非就是这几个对象的建立然后用req发出去,这里我要讲一下我的问题的所在,以至于我一度认为微信sdk有bug......

相信大家都知道,这个微信的验证是很麻烦的,必须要求我们的程序的签名,api_id和我们申请时候所填的包名必须一致才可以保证它的正常与运行。因为我在改自己的例子的时候吧,改包名那里就只是简单的用shift+alt+r更改了而已,然后我还特意的去我的workspace的文件夹发现这个例子的一层层的文件夹都变了就是先com->weixintest->wxapi,但是我在测试的是后无论怎样都测试不了,我还以为是签名的问题,于是在我的获取签名的手机软件里面输入:com.weixintest 竟然告诉我,这个没有签名,我就更加扑朔迷离了,大家可以想象一下我当时的心情,我的确是用Android->tool生成的签名apk啊,最后竟然告诉我没有签名,而且按照官方的说法我更改了包名就应该错误了吧,于是我又打开一个新的微信Demo的例子(可以正常运行的官方的例子),用shift+alt+r的方法把那个net.resourceforge.simcpux更改为了com.share最后竟然还可以正常与运行

神奇的是我在获取签名的软件中输入:net.resourceforge.simcpux竟然获取了默认的debug签名,我在想我这里也没有这个包啊?于是感觉特别神奇,这时,我就在想是什么让我没有该包呢,于是上网查了一下,发现改包的的方法还是我用的那个啊,这时候我无意的去看了一个关于解释微信的sdk的博客,我这才突然发现貌似也可以在manifest里面改包,于是我就去看了一下我的manifest,竟然发现我的包名竟然没有变化。。。。于是一切都明了了。。。然后我就在这里更改了包名为了com.wexintest于是就ok了!

或许对于一些大神来说没有遇到这用“二”的问题,由于我花费了很长时间才搞懂这个,就特地在此写出来分享一下,也做个纪念吧!

0 0
原创粉丝点击