先吐槽一下企鹅的开发文档和示例代码,还有所谓的接入指南。浪费我一下午好吗!开发测试中一堆的坑啊,官方甚至都没有一点友情提示好吗!你们的示例代码一定要写的那么坑爹吗?也不提示一下测试官方的demo也要专门签名,这种事情你不明确说谁能想到啊,阿啊阿啊阿啊!!!!

吐槽完全停不下来。。。大家稍等1小时。。。

———————————————1小时的切割线———————————————————

下面开始测试如何在android应用中加入分享到朋友圈或朋友的过程。

按照企鹅的官方指南,

首先,我们需要申请APPID,进入微信开放平台,管理中心,创建移动应用,按照要求填写要接入微信的应用信息。

注意,应用的包名和签名MD5值千千万万不要填错,如果不知道怎么签的名,那一定要先搞清楚签名再说,否则后面都是白扯。强烈建议用企鹅给的签名信息获取工具核对一下你的签名。这里又引入一次吐槽,企鹅你就不能在这个签名工具中提供复制功能么?就不能做个选择应用的功能,一定要手动输入包名,然后手动记下来长长的签名信息。。。

(此处吐槽1小时)

———————————————1小时的切割线———————————————————

第二步,下载开发的sdk包,就是那个libammsdk.jar。此处无坑。

快速进行到第3步,配置环境,就是在工程中导入那个jar包。熟悉eclipse和androidstudio的不会有问题。

第四步,开始编写测试代码。此处有坑。

首先是创建一个IWXAPI的实例,然后把App注册到微信。。。注册到微信这句话我理解错了,我起初以为只有要申请成为微信内部功能的应用才需要注册,而实际上,这里都需要注册。

IWXAPI api = WXAPIFactory.createWXAPI(this, "wxwxaaaaaabbbbbbs", true);api.registerApp("wxaaaaaabbbbbbs");

接下来就是构造一个请求,发送给微信。比较常用的是分享一个网页,那么可以这么做:

WXWebpageObject webpage = new WXWebpageObject();
WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title = "最贴心";
webpage.webpageUrl = "http://app.mi.com/detail/63164";//要分享的网页地址
msg.description = "这可真是一个好东西啊";
Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);//分享的缩略图
msg.thumbData = Utils.bmpToByteArray(thumb, true);SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage");
req.message = msg;
req.scene = SendMessageToWX.Req.WXSceneTimeline;//分享到朋友圈
//req.scene = SendMessageToWX.Req.WXSceneSession;//分享给某个朋友或者群聊
api.sendReq(req);

这就分享了。注意这里又有一个坑,官方照例不提示,sendReq()这个方法有个boolean的返回值,false表示没发成,true表示已发送。但是,这个已发送仅仅是已发送,不能代表成功分享,因此不能作为判断分享成功与否的标志。

上面代码里面还有个buildTransction(),官方示例中的,大家直接复制过来到工程中就可以了。

那么,怎么才能靠谱的接收分享的结果呢?那就需要这么做:

在你的工程中新建一个包,严格按照格式,假设你原来的工程包名是com.yourapp.test,那么新建一个包名叫做com.yourapp.test.wxapi,在这个包中新建一个Activity,必须名叫WXEntryActivity,否则必坑。。。

这个Activity的代码结构如下:

/*** Created by wanglei on 14-11-13.**  微信客户端回调activity示例 */
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {private static final String TAG = "WXEntryActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {IWXAPI api = WXAPIFactory.createWXAPI(this, "还是那个APPID", false);api.handleIntent(getIntent(), this);super.onCreate(savedInstanceState);}@Overridepublic void onReq(BaseReq arg0) {//这里是响应微信发起的对你的应用的请求的结果
}@Overridepublic void onResp(BaseResp resp) {//这是响应你的应用发送请求给微信的结果Log.i(TAG, "resp.errCode:" + resp.errCode + ",resp.errStr:" + resp.errStr);switch (resp.errCode) {case BaseResp.ErrCode.ERR_OK://分享成功break;case BaseResp.ErrCode.ERR_USER_CANCEL://分享取消break;case BaseResp.ErrCode.ERR_AUTH_DENIED://分享拒绝break;case BaseResp.ErrCode.ERR_SENT_FAILED:break;case BaseResp.ErrCode.ERR_UNSUPPORT:break;}}
}

然后,别忘了在AndroidManifest.xml中加入这个特定Activity的注册信息:

        <activityandroid:name=".wxapi.WXEntryActivity"android:exported="true"android:screenOrientation="portrait"android:theme="@android:style/Theme.Translucent.NoTitleBar" />

然后就到了最大的坑,混淆代码。官方说要在混淆的配置中加入下面的两句话避免出问题:

-keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*;}
-keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*;}

我就如实的加入了这两句。然后,开始了痛苦的测试。。。

由于我使用AndroidStudio,就将这两句放在了proguard-ruls.txt中。

点击分享到朋友圈,嗯?分享到朋友圈,我分享到朋友圈。。。除了要我登陆下微信之外,没有任何反应了,猛刷朋友圈也看不到分享的内容。

怎么回事?不是要出来个小框框让我分享的么?像这样:

为什么我的没有出现这个界面??神马情况?于是我一顿核对签名、包名,一遍一遍的看示例代码、看官方文档。无果。。。

最后,我终于想到,先不混淆试试,取消混淆,测试,成功。。。靠!难道企鹅给的混淆配置不对???????!!!!!

我看了看那么多的import,果然好像那个配置不能涵盖企鹅sdk中的那么多包,干脆一不做二不休,简单粗暴这样配置混淆好了:

-keep class com.tencent.mm.sdk.** {*;
}

亲们,果然就好了。。。

是我没搞明白还是企鹅你太坑了。。。
特此记录,纪念我那被坑掉的一下午

“分享到微信”的官方SDK和文档中的坑。。。相关推荐

  1. 微信支付官方SDK V3 .NET版的坑

    但是支付成功后却不能正确的执行支付结果js回调函数.看看其页面的点击事件是放在asp:Button上面的.我们知道在asp.net webform中,按钮的点击是有页面回调后台的.也就是其实点击了之后 ...

  2. EDB官方网站和文档的介绍

    这是杂货铺的第438篇文章 EDB的历史文章, <EDB无法删除分区子表的错误> <EDB(/PG)对于执行计划的解读> <EDB是什么数据库?> <EDB日 ...

  3. iOS逆向:微信逆向及动态库开发过程中的坑

    最近对 iOS 逆向很感兴趣,想学习下如何通过逆向app.分析源码.注入动态库的方式来给别人的软件增加些酷炫的功能.决定拿微信练手. 先上几个教程: 移动App入侵与逆向破解技术-iOS篇 给微信加 ...

  4. 安卓一键分享到qq,微信,微博,官方SDK非第三方

    当我们项目中需要集成分享功能时,我们通常会采取一下几个办法: 1.调用系统自带分享 优点:简单快速,几行代码搞定,不需添加任何额外包: 缺点:系统会调出手机内部所有带分享功能的APP,且界面风格跟随系 ...

  5. Android应用之——微信微博第三方sdk登录分享使用过程中的一些常见问题

    前言 最近在使用第三方登录和分享的过程中遇到了很多问题,一方面可以归结为自己经验的不足,另一方面其实也说明了官方文档的含糊不清.这篇博文不会写关于如何使用第三方登录分享,因为官方文档已经写明了步骤,这 ...

  6. Android官方SDK下载(含API文档)

    下载Android官方SDK文档的方法: 1.昨天我按照方法二下好了一份,大家可以直接下载:http://yunpan.cn/cy7NNkgfUbfDr (提取码:6075) (如果链接失效,请提醒我 ...

  7. 文档看得太迷糊?使用Unity开发增强现实/虚拟现实应用(AR/VR APP) 书籍和文档的阅读心得

    自己上手开发了两三个AR APP之后,用Unity进行AR/VR APP开发算是入了门.反思一下自己使用过的资料. 技术书籍 一开始是找比较新的技术书籍看,因为直接看文档有些难度. 对于有Unity基 ...

  8. Jquery的事件操作和文档操作

    对于熟悉前端开发的小伙伴,相信对于Jquery一定不陌生,相对于JavaScript的繁琐,Jquery更加的简洁,当然简洁不意味着简单,我们可以使用Jquery完成我们想要实现全部功能,这里为小白们 ...

  9. J-Link软件和文档包的版本发行说明(3)[V6.14 ~ V6.48b版本]

    官方链接:https://www.segger.com/downloads/jlink/ReleaseNotes_JLink.html J-Link软件和文档包的版本发行说明(1)[V3.00d ~ ...

  10. GraphQL 官方自述文档(翻译)

    原文地址:github.com/facebook/gr- 我们可以在 facebook.github.io/graphql/ 最新发布的/spec目录的markdown文件中找到 GraphQL的规范 ...

最新文章

  1. Source引擎的远程代码执行漏洞,可能影响千万游戏玩家
  2. linux 安装sap,Solman系列 安装SAP Solution Manager 7.1 on Suse Linux
  3. python画代码-一行Python代码画心型
  4. PLSQL_数据泵Datapump导入导出数据IMPDP / EXPDP(概念)(Oracle数据导入导出工具)(转)...
  5. rtsp协议_Chromium(3/5):rtsp客户端
  6. 多目标进化优化_SDIM 学术讲座|分解多目标优化与帕累托多任务学习
  7. Android学习笔记:TabHost 和 FragmentTabHost
  8. c++面向对象高级编程 学习十一 类模板、函数模板、成员模板
  9. 树莓派3代linux,树莓派 3B 入门 ARMv8 Arch Linux
  10. CCF NOI1153 素数环
  11. win7安装证书时无响应的解决办法
  12. RAS、AES、DES加密
  13. RabbitMQ三种Exchange
  14. centos5编译内核
  15. python123汉诺塔实践_python汉诺塔问题
  16. 华为路由器:AR真机忘记Console口密码的处理方法全过程演示
  17. win7桌面我的计算机打不开怎么回事,win7系统双击我的电脑打不开的解决方法
  18. iframe 跳转到其他页面
  19. 线程类的一些常用方法
  20. ubuntu安装pangolin

热门文章

  1. 20级逍遥装备材料汇总及出处
  2. android subscriber 自定义,android – 使用自定义ErrorHandler时,Retrofit不会触发onError
  3. 《点满舔狗相关技能以后,不知为何就转码了》之YOLOP,YOLOPV2推理入门教学
  4. CSS(PS切图、学成在线案例)
  5. arduino tft 方向_Arduino2.4英寸TFT显示屏的演示
  6. css3实现建筑物的旋转,CSS3实现旋转光环效果的实现步骤
  7. Java实现角度转换器
  8. Ajax 入门Demo
  9. memcached源码分析-----item锁级别与item引用计数
  10. 【总结】浪潮杯第七届ACM山东省省赛山师场总结