微信SDK分享功能集成的大坑小坑
最近由于相关需求,需要将微信分享集成到项目中,但在过程中遇到很多问题,现大致整理与此
此次过程中还有些许遗留问题(如无法分享app类型消息),待解决后会来此更新
(希望能有知晓的简友,给与指导解答,能早点解决)
<h2 id="1">一. APP申请审核</h2>
首先项目集成微信SDK,需要到官网注册,因为微信对第三方的调用有着严格的验证:App ID,包名,及应用签名,只有这三个跟申请的都完全匹配,才能调用分享。
按官网(微信开发平台)提示步骤申请移动应用,步骤都比较简单,按提示即可,需要说明的如下:
1) 应用官网那栏可以直接填写你的博客地址或其他
2) 包名需填写你所要集成项目的包名,后续可修改
3) 应用签名格式为小写连续,并且注意填写签名的版本
-
1.1 查看项目的应用签名
-
Eclipse 中查看
-
顶部菜单Window -> Preferences -> Build,打开面板即可看到应用签名(debug版),如图
Preferences - >Build - tip:运行下载的官网demo时,需要将签名文件替换为demo工程目录中的debug.keystore文件
-
-
Android Studio 中查看
- 找到打包生成应用签名(
Build-->Generate Signed APK...
)时候所产生的.jks文件
Generate Signed APK...
- 打开
Terminal
面板,输入以下命令行,再输入生成签名打包时候的密码即可:
keytool -list -v -keystore "E:...\签名文件.jks"
> ![命令行:最后引号中的路径即为.jks的文件路径](http://upload-images.jianshu.io/upload_images/1814468-0f980f06e336b064.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- 找到打包生成应用签名(
-
Tips
- 签名格式:小写连续不冒号
由于以上两个方式查看到的应用签名都是大写冒号间隔,如:
CE:18:7E:D6:7E:05:C2:D8:87:9B:F6:6B:BF:DF:C8:B9
但是申请时填写的应用签名需转换为小写连续不冒号,既:
ce187ed67e05c2d8879bf66bbfdfc8b9
不然会因应用签名不匹配而调起微信失败,闪回原程序 - 申请的签名与调试时所用版本是否匹配:
release
/debug
注意调试时项目是debug的还是打包的relaese版,两者所对应的签名不同, - 清除缓存:
若因签名不同,待确认所填写签名与使用版本的签名一致后,清除本地微信缓存或卸载重装微信后再调试 - 官网说明:Android常见问题
常见问题-部分
-
二. 环境配置
-
2.1 搭建环境
- 在Eclipse中建立你的工程。
- 在工程中新建一个libs目录,将开发工具包中libs目录下的libammsdk.jar复制到该目录中(如下图所示,建立了一个名为SDK_Sample 的工程,并把jar包复制到libs目录下)。
分享App失败
有哪位大神知晓原因或有做过的,希望能给予解答
四. 分享消息回调APP
-
4.1 网页调起
貌似由于微信加载WebView时添加过滤,所以利用scheme打开APP的方式在微信中失效
-
原理图示
-
代码
- HTML
<html> <head></head> <body> <a href=testapp://><span>lunch</span></a> <a href=testapp://id=1><span>lunch</span></a> </body> </html>
>- Android
<intent-filter > <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSER"/> <data android:scheme="testapp"/> </intent-filter>
- HTML
-
扩展
可以根据不同的需求,在网页上配置不同的scheme字段,并在AndroidManifest.xml相应的Activity中配置所匹配的scheme,从而可以实现根据网页打开特定界面的需求
-
遗留:其他App参考
京东/CSDN/知乎等APP,在微信中点击其分享的消息,跳转的webview顶部有控件,从而实现跳转
-
-
4.2 遗留:微信API调起
微信提供Demo中,能在微信中点击由Demo分享的app类型消息,从而跳回Demo,但本地集成中:
- 无法分享App类型消息,既无法分享WXAppExtendObject类型消息
-
按官网提供文档(4.[3] 接收微信的请求及返回值),新建WXEntryActivity类实现IWXAPIEventHandler接口,APP成功接收分享至微信的结果返回值,但微信发送的请求无反应,既如图:
官网文档截图
百思百度谷歌都无过,不知是否遗漏了什么要点,希望能有高人点解
-
4.3 未添加:判断是否安装并根据结果进行下载或直接打开
扩展
- <span id="api">微信API接口</span> -- 以下摘至:[转载]Android平台第三方应用分享到微信开发
-
微信开放平台的一些公共类
- 微信SDK会用到的主要类的类图
Paste_Image.png
上面这张图展示的是与微信通信过程中的请求类和响应类。第三方应用通过他们
附带的message字段来携带消息传输给微信进程。其中BaseResp有个内部类是ErrCode,它里面定义了几个常量字段,当我们向微信发送请求后它会作为返回字段返回到我们的应用中来,我们可以根据这个做相应的处理(比如弹个toast来提醒用户分享的状态)。- Message相关的类图
上面提到过,第三方应用是通过请求类和响应类中的message字段来和微信通信的,那么下面的图就展示了Message相关类的类图:
第三方应用和微信就是通过上面的不同种类的Message对象来与微信进行通信,从而能达到想要的效果。
- 通信相关类
上面的IWXAPI就是所说的通信类,所有与微信进行通信的工作都是他在做,我们可以通过下面的工厂类来生成一个IWXAPI对象。旁边的IWXAPIEventHandler接口是需要我们第三方应用来实现的,如果我们想处理微信的请求信息或是我们向他发请求后他返回的标识字段,我们可以按照实现这个接口(可以参考微信开放平台文档上有详细说明http://open.weixin.qq.com/document/gettingstart/android/?lang=zh_CN)。 -
微信与第三方应用通信时序图
- 第三方应用向微信发送消息时的时序图
应用只需要进行一次注册就行了,我们可以在一个Acitivity的onCreate()中注册。然后在以后的使用中只需要封装消息,让通信类发送即可。从前面的类图中可以看到,封装消息的顺序是首先生成需要发送的媒体对象,然后将媒体对象附加到消息对象中,接着建立请求对象,最后使用通信类发送即可。
在向微信发送消息的时候,会弹出一个分享到微信的弹框,包括分享到微信之后的消息展示,都是微信自己定义的UI展示,第三方应用是无法控制的(只是对不同消息类型,微信的展示也是不同的)。- 第三方应用接收微信请求信息的时序图
微信向第三方发送的请求信息分为两种:一种是第三方应用注册到微信后在聊天界面出现的应用图标(如下图所示)。然后点击这个图标能向第三方应用发送请求,第二种是针对微信的WXAppExtendObject类型的对象的,当用户点击了微信中的消息之后,微信就会去请求第三方应用完成请求。
它的时序图如下所示:
-
Refs:
android 微信 sdk api调用不成功解决方案运行
Android APP分享功能实现
Android:微信授权登录与微信分享全解析
Android利用微信SDK分享到微信教程,回调分享结果错误解决和注意点,androidsdk
接收微信的请求信息
解决微信开放平台分享图片失败问题
解决微信分享图片,网址失效的Bug -- 不完美解决
[转载]Android平台第三方应用分享到微信开发
Android平台好友点击微信分享的内容后跳转来源App的实现方案研究
微信直接打开App
Android平台好友点击微信分享的内容后跳转来源App的实现方案研究