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

先吐槽一下企鹅的开发文档和示例代码,还有所谓的接入指南。浪费我一下午好吗!开发测试中一堆的坑啊,官方甚至都没有一点友情提示好吗!你们的示例代码一定要写的那么坑爹吗?也不提示一下测试官方的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";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        IWXAPI api = WXAPIFactory.createWXAPI(this, "还是那个APPID", false);
        api.handleIntent(getIntent(), this);
        super.onCreate(savedInstanceState);

    }

    @Override
    public void onReq(BaseReq arg0) {
    //这里是响应微信发起的对你的应用的请求的结果
}

    @Override
    public 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的注册信息:

        <activity
            android: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.** {
    *;
}
亲们,果然就好了。。。

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












  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值