記錄微信分享的一些坑

在幫別的項(xiàng)目干活時遇到了要做微信分享的功能,當(dāng)時覺得這不就是小case(因?yàn)橹岸紝戇^),可能是由于那邊項(xiàng)目的人不太懂吧,居然沒有提前去申請微信app_id,沒關(guān)系,反正寫過,打開之前的項(xiàng)目,復(fù)制粘貼,他們申請好了肯定就能用了,先看看我是怎么寫的。



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

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

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

public IWXAPI api;? ? ? //這個對象是用來向微信發(fā)送數(shù)據(jù)的一個接口,所有的信息發(fā)送都是基于這個對象的

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

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

api.registerApp(APP_ID);

}

3、就是你寫你分享的ui了,具體就不粘貼代碼了,下面看一下微信分享的方法,下面以網(wǎng)頁分享為例子:

/**

*微信分享

*/

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;//分享的標(biāo)題

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、最后別忘記了微信分享的回調(diào),一定要在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里面注冊:

<activity

android:name="WXEntryActivity"

android:configChanges="keyboardHidden|orientation|screenSize"

android:exported="true"

android:screenOrientation="portrait"

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


寫完手工,過兩天他們告訴我appId申請下來了,填寫進(jìn)去,沒問題,一切OK,我果然還是很厲害的,但是事情還沒有結(jié)束,過了大概一個月他們突然告訴我微信分享不能用了。具體情況是朋友圈可以分享,微信好友分享的時候拉起好友列表以后發(fā)現(xiàn)好友列表點(diǎn)擊無效。這時候我就不信了,不可能吧,要壞一起壞,要好一起好啊,壞一般啥意思,我代碼又沒動過,想不明白,這時候我開啟了百度之旅。

?還真找到了幾個同樣的問題:

友盟分享,點(diǎn)擊微信分享,可以進(jìn)入微信,也有微信好友,點(diǎn)擊要分享的好友,不能成功,混淆什么都加了,不知道什么原因

這個問題困擾了我好久,微信和app都卸載了好幾遍,但是一到微信好友界面就是點(diǎn)擊后不能跳出彈框,朋友圈直接不能點(diǎn)開!!

最先感覺好像這個靠譜http://bbs.umeng.com/thread-13230-2-1.html是友盟官方論壇,說是沒有混淆好,我就千辛萬苦混淆了,可是。。。。。不行!!問題依然存在。

接下來我終于找到了解決方法,連接在此:http://bbs.umeng.com/thread-26260-1-1.html

仔細(xì)看了好久,這是3月多的公告啊,我也沒用精簡版啊,不對不對,接著找。


這個就很像了和我的問題一模一樣嘛,趕緊去加混淆,等等,不對,我就沒開啟混淆加什么加。

就這樣困擾了一天,直到晚上睡覺前突然想到,代碼我沒動,應(yīng)該沒問題,微信那么吊,應(yīng)該也不會有問題,是不是接口的鍋,先到這里趕緊打開電腦 把所有分享信息寫死,果然,成功了。

接著開始分析是哪里的問題吧仔細(xì)看看看分享的參數(shù):

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;

最終發(fā)現(xiàn)接口返回的title是空的,長見識了,原來title為空會導(dǎo)致這樣的問題,在此記錄一下,以后一定要謹(jǐn)記。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容