国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android微信第三方登錄(個人筆記)

2019-12-12 04:22:10
字體:
供稿:網(wǎng)友

今天在寫微信登錄,花了半天時間搞定、然后寫下自己的筆記,希望幫助更多的人。歡迎各位指教。

微信授權(quán)登錄,官方說的不是很清楚、所以導(dǎo)致有一部分的坑。

微信注冊應(yīng)用平臺的應(yīng)用簽名,下載 微信簽名生成工具 輸入項目的packageName也可以查看到。

注意:debug、Release 一定要區(qū)分,因為2種生成的微信簽名不一致,會導(dǎo)致沒有跳轉(zhuǎn)、回調(diào)。。。。一般在微信開發(fā)者上面注冊的是正式環(huán)境打包好的、)

 

 

申請微信開發(fā)者賬號、應(yīng)用申請省略。 

 1. AndroidManifest.xml 權(quán)限

<!-- 微信權(quán)限--><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"/> 

 2.在圖一按鈕上面,加上微信跳轉(zhuǎn)方法、也就是啟動微信登錄的方法

private void loginToWeiXin(){  IWXAPI mApi = WXAPIFactory.createWXAPI(this, WXEntryActivity.WEIXIN_APP_ID, true);  mApi.registerApp(WXEntryActivity.WEIXIN_APP_ID);  if (mApi != null && mApi.isWXAppInstalled()) {   SendAuth.Req req = new SendAuth.Req();   req.scope = "snsapi_userinfo";   req.state = "wechat_sdk_demo_test_neng";   mApi.sendReq(req);  } else   Toast.makeText(this, "用戶未安裝微信", Toast.LENGTH_SHORT).show(); }

3.在你的包名相應(yīng)目錄下新建一個wxapi目錄,并在該wxapi目錄下新增一個WXEntryActivity類,該類繼承自Activity

 package(項目報名).wxapi.WXEntryActivity.Java

回調(diào)方法onResp() 方法沒有觸發(fā)回調(diào)、請監(jiān)測WXEntryActivity onCreate中是否調(diào)用此方法  mApi.handleIntent(this.getIntent(), this);

package com.xxx.xxxx.android.wxapi;/** * 微信登錄頁面 * @author kevin_chen 2016-12-10 下午19:03:45 * @version v1.0 */public class WXEntryActivity extends Activity implements IWXAPIEventHandler { private static final String APP_SECRET = "填寫自己的AppSecret"; private IWXAPI mWeixinAPI; public static final String WEIXIN_APP_ID = "填寫自己的APP_id"; private static String uuid; @Override public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  mWeixinAPI = WXAPIFactory.createWXAPI(this, WEIXIN_APP_ID, true);  mWeixinAPI.handleIntent(this.getIntent(), this); } @Override protected void onNewIntent(Intent intent) {  super.onNewIntent(intent);  setIntent(intent);  mWeixinAPI.handleIntent(intent, this);//必須調(diào)用此句話 } //微信發(fā)送的請求將回調(diào)到onReq方法 @Override public void onReq(BaseReq req) {  LogUtils.log("onReq"); } //發(fā)送到微信請求的響應(yīng)結(jié)果 @Override public void onResp(BaseResp resp) {  LogUtils.log("onResp");  switch (resp.errCode) {  case BaseResp.ErrCode.ERR_OK:   LogUtils.log("ERR_OK");   //發(fā)送成功   SendAuth.Resp sendResp = (SendAuth.Resp) resp;   if (sendResp != null) {    String code = sendResp.code;    getAccess_token(code);   }   break;  case BaseResp.ErrCode.ERR_USER_CANCEL:   LogUtils.log("ERR_USER_CANCEL");   //發(fā)送取消   break;  case BaseResp.ErrCode.ERR_AUTH_DENIED:   LogUtils.log("ERR_AUTH_DENIED");   //發(fā)送被拒絕   break;  default:   //發(fā)送返回   break;  } } /**  * 獲取openid accessToken值用于后期操作  * @param code 請求碼  */ private void getAccess_token(final String code) {  String path = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="    + WEIXIN_APP_ID    + "&secret="    + APP_SECRET    + "&code="    + code    + "&grant_type=authorization_code";  LogUtils.log("getAccess_token:" + path);  //網(wǎng)絡(luò)請求,根據(jù)自己的請求方式  VolleyRequest.get(this, path, "getAccess_token", false, null, new VolleyRequest.Callback() {   @Override   public void onSuccess(String result) {    LogUtils.log("getAccess_token_result:" + result);    JSONObject jsonObject = null;    try {     jsonObject = new JSONObject(result);     String openid = jsonObject.getString("openid").toString().trim();     String access_token = jsonObject.getString("access_token").toString().trim();     getUserMesg(access_token, openid);    } catch (JSONException e) {     e.printStackTrace();    }   }   @Override   public void onError(String errorMessage) {   }  }); } /**  * 獲取微信的個人信息  * @param access_token  * @param openid  */ private void getUserMesg(final String access_token, final String openid) {  String path = "https://api.weixin.qq.com/sns/userinfo?access_token="    + access_token    + "&openid="    + openid;  LogUtils.log("getUserMesg:" + path);  //網(wǎng)絡(luò)請求,根據(jù)自己的請求方式  VolleyRequest.get(this, path, "getAccess_token", false, null, new VolleyRequest.Callback() {   @Override   public void onSuccess(String result) {    LogUtils.log("getUserMesg_result:" + result);    JSONObject jsonObject = null;    try {     jsonObject = new JSONObject(result);     String nickname = jsonObject.getString("nickname");     int sex = Integer.parseInt(jsonObject.get("sex").toString());     String headimgurl = jsonObject.getString("headimgurl");          LogUtils.log("用戶基本信息:");     LogUtils.log("nickname:" + nickname);     LogUtils.log("sex:" + sex);     LogUtils.log("headimgurl:" + headimgurl);    } catch (JSONException e) {     e.printStackTrace();    }    finish();   }   @Override   public void onError(String errorMessage) {   }  }); }}

5.在 AndroidManifest.xml 設(shè)置注冊微信的頁面

當(dāng)授權(quán)時候進入WXEntryActivity、當(dāng)前背景可能是

主站蜘蛛池模板: 抚宁县| 柳林县| 宁化县| 都江堰市| 金乡县| 铜陵市| 天长市| 玉溪市| 钦州市| 宁远县| 利辛县| 额尔古纳市| 吉安县| 凤翔县| 云南省| 格尔木市| 拜城县| 农安县| 墨玉县| 岑巩县| 庆阳市| 错那县| 都昌县| 望谟县| 五常市| 水富县| 西乌珠穆沁旗| 涪陵区| 恭城| 璧山县| 中宁县| 时尚| 玉树县| 黎川县| 许昌县| 丰城市| 阳原县| 郎溪县| 扶沟县| 麦盖提县| 淳安县|