一、微信开发
1.1、文档接入
1、申请你的AppID
请到开发者应用界面进行登记,登记选择移动应用设置后,将该应用提交审核,只有审核通过的应用才能进行开发。
2、下载微信终端开发工具包
开发工具包主要包含3部分内容:(其中,只有libammsdk.jar是必须的)
- libammsdk.jar(每个第三方应用必须导入该sdk库,用于实现与微信的通信)
- API文档(供开发查阅使用)
- 界面小工具源码(封装了界面表现的工具类,以及一些界面风格)
请前往以下下载最新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的测试版和打包签名后的版本的微信签名是不同的,需要特别注意。
3、搭建开发环境
将下载好的libammsdk.jar放入工程的libs目录下,然后右键Build Path -> Add To Build Path
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"/>
4、使用开发工具包
1) 注册到微信
在按照微信指定的Activity中的onCreate()方法中初始化APPID并注册。
api = WXAPIFactory.createWXAPI(this, APP_ID, true); api.registerApp(APP_ID);
2) 发送请求或响应到微信
现在,你的程序要发送请求或发送响应到微信终端,可以通过IWXAPI的 sendReq 和 sendResp 两个方法来实现。
- boolean sendReq(BaseReq req):第三方app主动发送消息给微信,发送完成之后会切回到第三方app界面。
- boolean sendResp(BaseResp resp):微信向第三方app请求数据,第三方app回应数据之后会切回到微信界面。
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.** { *; }
1.2、分享和收藏
微信分享及收藏是指第三方App通过接入该功能,让用户可以从App分享文字、图片、音乐、视频、网页至微信好友会话、朋友圈或添加到微信收藏。
微信分享及收藏功能已向全体开发者开放,开发者在微信开放平台帐号下申请App并通过审核后,即可获得微信分享及收藏权限。
微信分享及收藏目前支持文字、图片、音乐、视频、网页共五种类型。开发者在App中在集成微信SDK后,可调用接口实现,
以下依次是文字分享、图片分享、音乐分享、视频分享、网站分享的示例
分享或收藏的目标场景,通过修改scene场景值实现。
- 发送到聊天界面——WXSceneSession
- 发送到朋友圈——WXSceneTimeline
- 添加到微信收藏——WXSceneFavorite
1、文字类型分享示例
2、图片类型分享示例
3、音乐类型分享示例
注意:分享至微信的音乐,直接点击好友会话或朋友圈下的分享内容会跳转至第三方 APP,
点击会话列表顶部的音乐分享内容将跳转至微信原生音乐播放器播放。
4、视频类型分享示例
5、网页类型分享示例
1.3、微信登录
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(); } } }); }
##############################################################