记录微信分享的一些坑

在帮别的项目干活时遇到了要做微信分享的功能,当时觉得这不就是小case(因为之前都写过),可能是由于那边项目的人不太懂吧,居然没有提前去申请微信app_id,没关系,反正写过,打开之前的项目,复制粘贴,他们申请好了肯定就能用了,先看看我是怎么写的。



1、添加最新的微信分享sdk:

compile'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

2、微信初始化,你可以在Application 里面写,也可以在分享的activity的onCreat方法里面写:

public IWXAPI api;      //这个对象是用来向微信发送数据的一个接口,所有的信息发送都是基于这个对象的

public void registerWeChat(Context context) {  //向微信注册app

api = WXAPIFactory.createWXAPI(context, APP_ID, true);

api.registerApp(APP_ID);

}

3、就是你写你分享的ui了,具体就不粘贴代码了,下面看一下微信分享的方法,下面以网页分享为例子:

/**

*微信分享

*/

private void  wechatShare(int flag,String title,String content,String url) {

WXWebpageObject webpage = new  WXWebpageObject();

webpage.webpageUrl = url;//分享的url

WXMediaMessage msg = new WXMediaMessage(webpage);

msg.title=title;//分享的标题

msg.description=content;//分享描述

//这里替换一张自己工程里的图片资源

Bitmapthumb=BitmapFactory.decodeResource(getResources(),R.mipmap.icon_share);

msg.setThumbImage(thumb);

SendMessageToWX.Reqreq=newSendMessageToWX.Req();

req.transaction= buildTransaction("webpage");

req.message=msg;

req.scene=

flag==0?SendMessageToWX.Req.WXSceneSession:SendMessageToWX.Req.WXSceneTimeline;

mIWXAPI.sendReq(req);

}

privateStringbuildTransaction(finalStringtype) {

return(type==null) ?String.valueOf(System.currentTimeMillis())

:type+System.currentTimeMillis();

}

4、最后别忘记了微信分享的回调,一定要在wxapi包下面建一个Activity名字叫WXEntryActivity(固定)

public class  WXEntryActivity  extends  AppCompatActivity   implements  IWXAPIEventHandler{

private static final  String  TAG  =  "WXEntryActivity";

private  IWXAPI api;

@Override

public void  onCreate(Bundle  savedInstanceState) {

super.onCreate(savedInstanceState);

api = WXAPIFactory.createWXAPI(this,Constant.WX_APP_ID,false);

//api.registerApp(Constant.WX_APP_ID);

api.handleIntent(getIntent(),this);

}

@Override

protected voidonNewIntent(Intentintent) {

super.onNewIntent(intent);

setIntent(intent);

api.handleIntent(intent,this);

}

@Override

public voidonReq(BaseReq baseReq) {

Log.d(TAG,"we chat in");

}

@Override

public voidonResp(BaseResp baseResp) {

switch(baseResp.errCode) {

case  BaseResp.ErrCode.ERR_OK:

//分享成功

Toast.makeText(WXEntryActivity.this,R.string.share_success,Toast.LENGTH_SHORT).show();

break;

case  BaseResp.ErrCode.ERR_USER_CANCEL:

//分享取消

Toast.makeText(WXEntryActivity.this,R.string.share_cancel,Toast.LENGTH_SHORT).show();

break;

case  BaseResp.ErrCode.ERR_AUTH_DENIED:

Toast.makeText(WXEntryActivity.this,R.string.share_denied,Toast.LENGTH_SHORT).show();

break;

case  BaseResp.ErrCode.ERR_SENT_FAILED:

Toast.makeText(WXEntryActivity.this,R.string.share_send_failed,Toast.LENGTH_SHORT).show();

break;

case  BaseResp.ErrCode.ERR_UNSUPPORT:

Toast.makeText(WXEntryActivity.this,R.string.share_unsupport_error,Toast.LENGTH_SHORT)

.show();

break;

default:

Toast.makeText(WXEntryActivity.this,R.string.share_failed,Toast.LENGTH_SHORT).show();

break;

}

finish();

}

}

5、最后别忘记了在AndroidMainfest.xml里面注册:

android:name="WXEntryActivity"

android:configChanges="keyboardHidden|orientation|screenSize"

android:exported="true"

android:screenOrientation="portrait"

android:theme="@android:style/Theme.Translucent.NoTitleBar"/>


写完手工,过两天他们告诉我appId申请下来了,填写进去,没问题,一切OK,我果然还是很厉害的,但是事情还没有结束,过了大概一个月他们突然告诉我微信分享不能用了。具体情况是朋友圈可以分享,微信好友分享的时候拉起好友列表以后发现好友列表点击无效。这时候我就不信了,不可能吧,要坏一起坏,要好一起好啊,坏一般啥意思,我代码又没动过,想不明白,这时候我开启了百度之旅。

 还真找到了几个同样的问题:

友盟分享,点击微信分享,可以进入微信,也有微信好友,点击要分享的好友,不能成功,混淆什么都加了,不知道什么原因

这个问题困扰了我好久,微信和app都卸载了好几遍,但是一到微信好友界面就是点击后不能跳出弹框,朋友圈直接不能点开!!

最先感觉好像这个靠谱http://bbs.umeng.com/thread-13230-2-1.html是友盟官方论坛,说是没有混淆好,我就千辛万苦混淆了,可是。。。。。不行!!问题依然存在。

接下来我终于找到了解决方法,连接在此:http://bbs.umeng.com/thread-26260-1-1.html:

仔细看了好久,这是3月多的公告啊,我也没用精简版啊,不对不对,接着找。


记录微信分享的一些坑_第1张图片

这个就很像了和我的问题一模一样嘛,赶紧去加混淆,等等,不对,我就没开启混淆加什么加。

就这样困扰了一天,直到晚上睡觉前突然想到,代码我没动,应该没问题,微信那么吊,应该也不会有问题,是不是接口的锅,先到这里赶紧打开电脑 把所有分享信息写死,果然,成功了。

接着开始分析是哪里的问题吧仔细看看看分享的参数:

webpage.webpageUrl=url;

WXMediaMessagemsg=newWXMediaMessage(webpage);

msg.title=title;

msg.description=content;

//这里替换一张自己工程里的图片资源

Bitmapthumb=BitmapFactory.decodeResource(getResources(),R.mipmap.icon_share);

msg.setThumbImage(thumb);

SendMessageToWX.Reqreq=newSendMessageToWX.Req();

req.transaction= buildTransaction("webpage");

req.message=msg;

最终发现接口返回的title是空的,长见识了,原来title为空会导致这样的问题,在此记录一下,以后一定要谨记。

你可能感兴趣的:(记录微信分享的一些坑)