這兩天項目需求,需要做分享功能。這塊之前是用shareSdk實現的,現在發現有些局限,計划用原生的微信官方提供的sdk來做。
因此,這篇文章主要是做一個整理和總結,供自己備忘和大家參考。
1.申請你的AppID
請到 開發者應用登記頁面 進行登記,登記並選擇移動應用進行設置后,將該應用提交審核,只有審核通過的應用才能進行開發。
2.下載微信終端開發工具包並導入
開發工具包主要包含3部分內容:(其中,只有libammsdk.jar是必須的)
-
- libammsdk.jar(每個第三方應用必須要導入該sdk庫,用於實現與微信的通信)
3.添加必要的權限支持:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
4.代碼編寫
微信為我們提供了豐富的接口和元素支持分享功能的實現。主要有下面幾種元素
WXWebpageObject // 網頁對象
WXTextObject // 文本對象
WXImageObject // 圖片對象
WXMusicObject // 音樂對象
WXVideoObject // 視頻對象
WXEmojiObject //Emoji表情對象
下面上代碼了。
private IWXAPI api;
api = WXAPIFactory.createWXAPI(this, APPID);
api.registerApp(APPP_ID);
WXWebpageObject webpage = new WXWebpageObject();
//跳轉的網頁url
webpage.webpageUrl = "http://www.baidu.com";
// 創建媒體消息對象
WXMediaMessage msg = new WXMediaMessage(webpage);
//標題
msg.title = "WebPage Title WebPage Title WebPage Title WebPage Title WebPage Title WebPage Title WebPage Title WebPage Title WebPage Title Very Long Very Long Very Long Very Long Very Long Very Long Very Long Very Long Very Long Very Long";
//描述
msg.description = "WebPage Description WebPage Description WebPage Description WebPage Description WebPage Description WebPage Description WebPage Description WebPage Description WebPage Description Very Long Very Long Very Long Very Long Very Long Very Long Very Long";
//分享市左邊的圖片(如果沒有系統會有一個默認的)圖片大小要求小於 32K
Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.drawable.send_music_thumb);
msg.thumbData = Util.bmpToByteArray(thumb, true);
//Req對象
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage");
req.message = msg;
//分享到朋友圈(微信版本4.2之前不支持分享到朋友圈)
req.scene = SendMessageToWX.Req.WXSceneTimeline ;
//分享給好友
//req.scene = SendMessageToWX.Req.WXSceneSession;
api.sendReq(req);
private String buildTransaction(final String type) {
return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}
下面再來看給音頻的例子
WXMusicObject music = new WXMusicObject();
music.musicUrl="http://staff2.ustc.edu.cn/~wdw/softdown/index.asp/0042515_05.ANDY.mp3";
music.musicLowBandUrl = "http://www.qq.com"; //低帶寬音頻
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = music;
msg.title = "Music Title";
msg.description = "Music Album";
Bitmap thumb = BitmapFactory.decodeResource(getResources(), R.drawable.send_music_thumb);
msg.thumbData = Util.bmpToByteArray(thumb, true);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("music");
req.message = msg;
req.scene = SendMessageToWX.Req.WXSceneTimeline ;
api.sendReq(req);
5.關於混淆
如果需要混淆代碼,為了保證sdk的正常使用,需要在proguard.cfg加上下面兩行配置:
-keep class com.tencent.mm.sdk.** {
*;
}
好啦,就這么多了,希望能對看到的人,有所幫助、