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

不得不说,为了实现一个微信简单的分享功能真的是浪费了我好多的时间,官方的文档说的什么我也不做什么评价,毕竟这个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() {
			
			@Override
			public 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);
			}
		});
    }
	// 微信发送请求到第三方应用时,会回调到该方法
	@Override
	public void onReq(BaseReq req) {
		
	}

	// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
	@Override
	public 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了!

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

你可能感兴趣的:(Android开发,解决方案,sdk,微信,第三方应用)