微信sdk应用消息的接入(android)

来源:互联网 发布:linux虚拟机nat上网 编辑:程序博客网 时间:2024/05/16 07:30

        最近随着android应用的开发,我根据需求需要添加微信sdk,其作用是在一个手机上打开我的应用,然后使用微信sdk发送一个应用消息给另一个微信用户,另一个用户在接收到信息之后,点击接收到的应用消息,如果手机上没有安装我的应用,那么就进行下载,如果已经安装了,那么就打开这个应用,并且接收相应的参数,做一些逻辑上的跳转。

        乍一看这个需求是很明确的,在微信sdk的官网也能看到这个功能的确已经被实现了,但是我自己在添加的过程中就遇到了一些问题,在这里我把我的感想记录下来,作为一个参考。

       首先是微信官方提供给我们开发者的demo,这个demo一开始我用eclipse导入,直接安装在我的手机上,发现所有的接口功能都无法调用,后来发现自己原来没有使用自带的

 debug.keystore ,所以导致我的签名和微信官方配置的签名不一致,从而导致微信demo中的接口都无法使用。那么解决方式就是使用demo文件夹底下的debug.keystore打包,同时我们打包所用的密码都是android,然后就可以发现我们的例子里的各个功能都可以正常使用了。

        既然例子可以正常使用,我们就可以根据例子里的代码,去发送我们的应用消息了。首先,在微信sdk的官网上,我们可以根据它所描述的步骤,如申请我们的应用,在manifest里面配置相应的权限等,去一一实现,这里比较简单直接,我就不一一赘述了。下面就来谈谈我遇到的问题。

       我遇到的第一个问题是:如果我手机上没有安装当前的应用,我接收到了别人发送的应用消息,那么我就应该打开相应的网址,一般这个网址的作用是提供下载。我检查了自己的代码,如下:


protected  void inviteTeacherWx(String title, String description){final WXAppExtendObject appdata = new WXAppExtendObject();final String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/test.png";appdata.fileData = Utils.readFromFile(path, 0, -1);appdata.extInfo = ""+UserInfo.getInstance().getSchoolId(this);final WXMediaMessage msg = new WXMediaMessage();if(appdata.fileData != null) {msg.setThumbImage(Utils.extractThumbNail(path, 150, 150, true));}msg.title = title;msg.description = description;msg.mediaObject = appdata;SendMessageToWX.Req req = new SendMessageToWX.Req();req.transaction = String.valueOf(System.currentTimeMillis());req.message = msg;api.sendReq(req);}

       这里有个小插曲,我发现这里直接写了一张从内存上读取的test.png的图片,而这张图片其实我并没有用到,我用到的图片是我在创建应用的时候就上传的一张图片,所以我就保留了原来的写法,只不过它根本不会执行~~下面我就遇到了上文所说的第一个问题,我要打开我的应用的下载地址,那么这个地址一定是我配置的,因为我们android的开发是和ios一起进行的,根据ios的小伙伴说appdata这个对象应该有一个值是url,也就是设置我们的下载路径的参数,而我经过尝试发现url这个参数根本在android 微信sdk里是不存在的,并且我几乎尝试了所有的参数,甚至连filepath都试过了,都不可以。所以我的android打开的网址都是微信sdk默认的一个wap网页。这是怎么回事呢?我后来发现原来这个参数的配置是在微信sdk后台做的,也就如下图所示:

  


        一开始我的这个值是空的,所以一直点不开我的应用的下载链接,在客户端也找不到这个url的设定的地方。在android端的应用消息的下载url的配置应该是在我们的应用的微信sdk后台直接配置的。我不知道为什么ios那里就有一个包含url的WXAPPExtendObject对象,而相应的android的WXAPPExtendObject却没有这个参数,难道是当时开发的时候遗漏了吗~

        第二个问题就是在我们下载的微信官方sdk的demo里我们根据上面的打包方法是可以发送我们的应用消息的,但是在我自己的应用里我却不能发送我的应用消息,我已经按照demo里的做法添加了我上面所贴的代码,几乎和demo里所提供的一模一样,但是却无法执行我们的发送应用消息的功能。这里其实也很简单,就是把我们项目中添加demo中的代码,其中最重要的是我们贴demo的代码的时候连文件结构也要与demo中的一致,否则微信sdk的接口是无法调用的。官方的教程在https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417751808&token=&lang=zh_CN,我觉得最重要的一句是:a. 在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity,我一开始的错误就是没有按照这一步,而是自己随意放了一个位置,导致错误,在这里强调一下。接sdk的时候还是要仔细看别人的文档啊,要不然严重影响效率~~

       还有,即使直接在我们的手机上进行调试的时候,也需要使用我们的keystore,可能是为了匹配我们的微信后台的appid吧,让我们的app和微信相关联。如果少了这一步,我们的app在调用微信相关接口的时候可能会闪退~我使用的是android studio,所以我设置keystore的方法是:

       在我们的项目的build.gradle中添加如下的代码(在android{} 内部添加):

       

signingConfigs {        debug {            storeFile file("C:/Users/User01/Desktop/debug.keystore")        }    }
其中的字符串是我们的本机上的keystore的目录。

   

2 0
原创粉丝点击