在幫別的項(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)記。