微信分享sdk接入填坑记录

1. 账号申请
    一般申请一天后就会审核通过。
    生成app签名,这个签名是由app的签名文件keystorre决定的,生成方式:保证手机上安装的目标app是正式使用的keystore生成的apk  将微信获取签名的apk安装到该手机,输入app包名获取签名(该签名        是由keystore决定的,与机型无关,微博和微信获取到的签名也是一致的)

2.分享接入
    微信分享接入说明   https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317340&token=&lang=zh_CN
    吐槽一下微信的文档,简陋的不能再简陋了。遇到问题只能自己摸索
    接入微信分享和支付可以共同使用libammsdk.jar一个文件就可以了,不像微博要引入一堆
    微信分享支持文字,图片,音频,视频,网页等5种形式的分享。其中后三种都支持缩略图
    
5种形式分享实现太多代码 放在文章最后


    
3.获取分享结果
    接收微信分享的结果是整个工程中的大坑
    要求:
        1)创建一个WXEntryActivity.java类 该类继承Activity 且必须实现IWXAPIEventHandler接口
        2) 接收返回信息的类WXEntryActivity.java 名字不能变,且必须在packagename.wxapi包下,如:程序包名(注册时提交给微信的包名)是com.sb.test 那么WXEntryActivity.java这个文件就应该在com.sb.test.wxapi下
    
    实现
    public class WXEntryActivity extends Activity implements IWXAPIEventHandler {

    private IWXAPI mWechatApi;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mWechatApi = WXAPIFactory.createWXAPI(this, ShareConstants.WECHAT_APP_KEY, false);
        mWechatApi.handleIntent(getIntent(), this);    // 这里不必api.regist再次注册了
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);

        setIntent(intent);
        mWechatApi.handleIntent(intent, this);
    }

    @Override
    public void onReq(BaseReq paramBaseReq) {
        Toast.makeText(this, "onReq toast", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onResp(BaseResp paramBaseResp) {

        int result = 0;
        switch (paramBaseResp.errCode) {
        case BaseResp.ErrCode.ERR_OK:
            result = R.string.share_result_success;
            break;
        case BaseResp.ErrCode.ERR_USER_CANCEL:
            result = R.string.share_result_cancel;
            break;
        case BaseResp.ErrCode.ERR_AUTH_DENIED:
            result = R.string.share_result_deny;
            break;
        default:
            result = R.string.share_result_unknown;
            break;
        }

        Toast.makeText(this, result, Toast.LENGTH_LONG).show();
        finish();
    }
}

注意,注意,注意
这里的结果回调必须按照上面的要求定义成Activity(按照要求,按照要求,按照要求) 如果想在Fragment中回调的 就暂时不要想了,没用的

如果工程中分享的代码不在主包名下,也就是说 我实现的分享模块在com.sb.share下,又不想将WXEntryActivity 孤零零的定义到com.sb.test中这时Activity-alias可以帮助你
用法如下
 
       
            android:name="com.sb.share.wxapi.WXEntryActivity"
            android:exported="true"
            android:theme="@style/Theme.NoDisplay" >
       

       
            android:name="com.sb.test.wxapi.WXEntryActivity"
            android:exported="true"
            android:targetActivity="com.sb.share.wxapi.WXEntryActivity" >
       
   


如果根据demo添加以下filter会出现两个桌面icon
               
              
几种形式的分享实现
    private boolean shareTextMessage(data)  {
        WXTextObject textObj = new WXTextObject();
        textObj.text = getText(data);

        WXMediaMessage msg = new WXMediaMessage(textObj);
        msg.description = getText(data);
        return sendMediaMessage(msg, getScene(data));
    }

    private boolean shareImageMessage(data) {
        Bitmap bitmap = getBitmap(data);
        if (bitmap == null || bitmap.isRecycled()) {
            return false;
        }
        WXImageObject imgObj = new WXImageObject(bitmap);
        WXMediaMessage msg = new WXMediaMessage(imgObj);

        Bitmap thumbBmp = Bitmap.createScaledBitmap(bitmap, getThumbWidth(data), getThumbHeight(data), true);
        bitmap.recycle();

        msg.thumbData = ShareUtils.bmpToByteArray(thumbBmp, true);

        return sendMediaMessage(msg, getScene(data));

    }

    private boolean shareMusicMessage(data) {
        WXMusicObject musicObj = new WXMusicObject();
        musicObj.musicUrl = getUrl(data);

        return sendMediaMessage(musicObj, data);
    }

    private boolean shareVideoMessage(data) {
        WXVideoObject videoObj = new WXVideoObject();
        videoObj.videoUrl = getUrl(data);

        return sendMediaMessage(videoObj, data);
    }

    private boolean shareWebPageMessage(data) {
        WXWebpageObject webpageObj = new WXWebpageObject();
        webpageObj.webpageUrl = getUrl(data);
        return sendMediaMessage(webpageObj, data);
    }

    private boolean sendMediaMessage(WXMediaMessage msg, int scene) {
        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.transaction = buildTransaction(msg.getType());
        req.message = msg;
        req.scene = scene;
        return mWechatShareAPI.sendReq(req);
    }

    private boolean sendMediaMessage(IMediaObject obj, data) {

        WXMediaMessage msg = new WXMediaMessage(obj);
        msg.title = getSubject(data);
        msg.description = getDescription(data);     // descrition 在分享到朋友圈时只有 音乐 视频能显示出来,分享到好友时 web也能显示出来
        Bitmap thumb = getBitmap(data);
        if (thumb != null && !thumb.isRecycled()) {
            msg.thumbData = ShareUtils.bmpToByteArray(thumb, true);
        }
        SendMessageToWX.Req req = new SendMessageToWX.Req();
        req.transaction = buildTransaction(msg.getType());
        req.message = msg;
        req.scene = getScene(data);
        return mWechatShareAPI.sendReq(req);
    }

    private String buildTransaction(final int type) {
        StringBuilder sb = new StringBuilder();
        sb.append(type);
        sb.append("#");
        sb.append(System.currentTimeMillis());
        return sb.toString();
    }
           
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值