一、申請你的AppIDandroid
請到開發者應用界面進行登記,登記選擇移動應用設置後,將該應用提交審覈,只有審覈經過的應用才能進行開發。json
二、下載微信終端開發工具包api
開發工具包主要包含3部份內容:(其中,只有libammsdk.jar是必須的)微信
請前往如下下載最新SDK包網絡
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&token=&lang=zh_CN
注意:App的測試版和打包簽名後的版本的微信簽名是不一樣的,須要特別注意。微信開發
三、搭建開發環境app
將下載好的libammsdk.jar放入工程的libs目錄下,而後右鍵Build Path -> Add To Build Pathide
1) 設置須要的權限工具
<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"/>
四、使用開發工具包開發工具
1) 註冊到微信
在按照微信指定的Activity中的onCreate()方法中初始化APPID並註冊。
api = WXAPIFactory.createWXAPI(this, APP_ID, true); api.registerApp(APP_ID);
2) 發送請求或響應到微信
如今,你的程序要發送請求或發送響應到微信終端,能夠經過IWXAPI的 sendReq 和 sendResp 兩個方法來實現。
sendReq實例使用:
SendMessageToWX.Req的scene成員,若是scene填WXSceneSession,那麼消息會發送至微信的會話內。
若是scene填WXSceneTimeline(微信4.2以上支持,若是須要檢查微信版本支持API的狀況,可調用IWXAPI的getWXAppSupportAPI方法,
0x21020001及以上支持發送朋友圈),那麼消息會發送至朋友圈。scene默認值爲WXSceneSession。
sendResp實例使用:
具體要發送的內容由第三方app開發者定義,具體可參考微信開發工具包中的SDK Sample Demo源碼。
3) 接收微信請求及返回值
a) 在你的包名相應目錄下新建一個wxapi目錄,並在該wxapi目錄下新增一個WXEntryActivity類,該類繼承自Activity
b) 在清單文件中給該Activity配置exported屬性
<activity android:name="com.hll.phoneserver.wxapi.WXEntryActivity" android:label="@string/app_name" android:exported="true" android:launchMode="singleTop" android:screenOrientation="portrait"> </activity>
c) 實現IWXPIEEventHandler接口,微信發送的請求將回調到onReq方法,發送到微信請求的響應結果將回調到onResp方法
private void registAppID() { api = WXAPIFactory.createWXAPI(this, APP_ID, true); api.registerApp(APP_ID); api.handleIntent(getIntent(), new IWXAPIEventHandler() { // 第三方應用發送到微信的請求處理後的響應結果,會回調到該方法 @Override public void onResp(BaseResp resp) { String result = null; SendAuth.Resp re = (Resp) resp; String code = re.code; switch (resp.errCode) { case BaseResp.ErrCode.ERR_OK:// 0:用戶贊成 result = "受權成功"; getOpenID(code); Toast.makeText(WXEntryActivity.this, result, Toast.LENGTH_SHORT).show(); break; case BaseResp.ErrCode.ERR_AUTH_DENIED:// -4:用戶拒絕受權 result = "拒絕受權,受權失敗"; break; case BaseResp.ErrCode.ERR_USER_CANCEL:// -2:用戶取消 result = "取消受權,受權失敗"; break; default: result = "未知錯誤,受權失敗"; break; } Toast.makeText(WXEntryActivity.this, result, Toast.LENGTH_SHORT).show(); } @Override public void onReq(BaseReq req) { } }); }
使用該Jar包在混淆的時候,須要作以下配置:
-keep class com.tencent.mm.sdk.** { *; }
微信分享及收藏是指第三方App經過接入該功能,讓用戶能夠從App分享文字、圖片、音樂、視頻、網頁至微信好友會話、朋友圈或添加到微信收藏。
微信分享及收藏功能已向全體開發者開放,開發者在微信開放平臺賬號下申請App並經過審覈後,便可得到微信分享及收藏權限。
微信分享及收藏目前支持文字、圖片、音樂、視頻、網頁共五種類型。開發者在App中在集成微信SDK後,可調用接口實現,
如下依次是文字分享、圖片分享、音樂分享、視頻分享、網站分享的示例
分享或收藏的目標場景,經過修改scene場景值實現。
一、文字類型分享示例
二、圖片類型分享示例
三、音樂類型分享示例
注意:分享至微信的音樂,直接點擊好友會話或朋友圈下的分享內容會跳轉至第三方 APP,
點擊會話列表頂部的音樂分享內容將跳轉至微信原生音樂播放器播放。
四、視頻類型分享示例
五、網頁類型分享示例
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list &t=resource/res_list&verify=1&id=open1419317851&token=&lang=zh_CN
獲取暱稱
/**回收寶工程師App向微信請求獲取暱稱*/ public void requestNickName(String acessToken, String openId){ if (mProgressDialog == null) { mProgressDialog = CustomProgressDialog.createDialog(this); mProgressDialog.setCancelable(false); } mProgressDialog.show(); String url = Constant.WEICHAT_GET_NICKNAME + "access_token=" + acessToken + "&openid=" + openId; HttpUtils httpUtils = new HttpUtils(); httpUtils.configCurrentHttpCacheExpiry(1000 * 10); httpUtils.send(HttpMethod.GET, url, null, new RequestCallBack<String>() { @Override public void onFailure(HttpException arg0, String arg1) { if (mProgressDialog != null) { mProgressDialog.dismiss(); mProgressDialog = null; } Toast.makeText(WXEntryActivity.this,"鏈接超時,網絡不給力啊!", Toast.LENGTH_LONG).show(); } @Override public void onSuccess(ResponseInfo<String> arg0) { if (mProgressDialog != null) { mProgressDialog.dismiss(); mProgressDialog = null; } try { JSONObject json = new JSONObject(arg0.result); String nickName = json.getString("nickname"); mTvNickName.setText(nickName); SharedPreferencesUtils.put(WXEntryActivity.this, Constant.WEIXINNICKNAME, nickName); } catch (JSONException e) { e.printStackTrace(); } } }); }
##############################################################