您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“java如何實現安卓app和微信授權登錄功能”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“java如何實現安卓app和微信授權登錄功能”這篇文章吧。
賬號體系
注冊微信開放平臺,創建移動應用,填寫一系列的信息,在應用平臺填寫app
簽名和包名,審核通過之后,取得AppID
和AppSecret
加載sdk和初始化
加載微信sdk
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
初始化
public class App extends Application { public static IWXAPI iwxapi; public void onCreate() { super.onCreate(); // 通過WXAPIFactory工廠,獲取IWXAPI的實例 iwxapi = WXAPIFactory.createWXAPI(this, BuildConfig.WXAPP_ID, true); // 將應用的appId注冊到微信 iwxapi.registerApp(BuildConfig.WXAPP_ID); //建議動態監聽微信啟動廣播進行注冊到微信 registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // 將該app注冊到微信 iwxapi.registerApp(BuildConfig.APPLICATION_ID); } }, new IntentFilter(ConstantsAPI.ACTION_REFRESH_WXAPP)); } }
WXAPP_ID
為開放平臺提供的AppID
APPLICATION_ID
為app
包名
在app
根目錄(/java/com.xxx.xxx/
) 新建Packagewxapi
, 在wxapi
新建Activity
名為:WXEntryActivity
,大概長這樣:/java/com.xxx.xxx/wxapi/WXEntryActivity.java
public class WXEntryActivity extends Activity implements IWXAPIEventHandler { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 隱藏狀態欄 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //接收到分享以及登錄的intent傳遞handleIntent方法,處理結果 App.iwxapi.handleIntent(getIntent(), this); } @Override public void onReq(BaseReq baseReq) { } @Override public void onResp(BaseResp baseResp) { switch (baseResp.errCode) { case BaseResp.ErrCode.ERR_OK: //微信回調成功 String code = ((SendAuth.Resp) baseResp).code; //取得微信的code ,就可以干很多事情 finish(); break; case BaseResp.ErrCode.ERR_AUTH_DENIED://用戶拒絕授權 finish(); break; case BaseResp.ErrCode.ERR_USER_CANCEL://用戶取消 finish(); break; default: finish(); break; } } }
通過code
取得open
信息,比如openid
,access_token
等一系列信息。
private void getOpenInfo(String code) { OkHttpUtils.get().url("https://api.weixin.qq.com/sns/oauth3/access_token") .addParams("appid", BuildConfig.WXAPP_ID) .addParams("secret", BuildConfig.WXAPP_Secret) .addParams("code", code) .addParams("grant_type", "authorization_code") .build().execute(new StringCallback() { @Override public void onError(Call call, Exception e, int id) { Toast.makeText(WXEntryActivity.this, "微信授權失敗", Toast.LENGTH_LONG).show(); finish(); } @Override public void onResponse(String response, int id) { JSONObject jsonObject = JSONObject.parseObject(response); String openId = jsonObject.getString("openid"); String access_token = jsonObject.getString("access_token"); Log.v("openId", openId + "---" + access_token); // 取得openid 又可以干很多事情 // 在這里可以 對接 自己的 系統的用戶信息等 finish(); } }); }
通過openid
可以查詢用戶昵稱,頭像等信息。
private void getUserInfo(String access_token, String openid) { OkHttpUtils.get().url("https://api.weixin.qq.com/sns/userinfo") .addParams("access_token", access_token) .addParams("openid", openid) .build().execute(new StringCallback() { @Override public void onError(Call call, Exception e, int id) { finish(); Toast.makeText(WXEntryActivity.this, "微信授權失敗", Toast.LENGTH_LONG).show(); } @Override public void onResponse(String response, int id) { //JSONObject jsonObject = JSONObject.parseObject(response); Log.v("response", response); } }); }
分享圖片:
/** *bmp 分享圖片 *width 縮略圖寬 *height 縮略圖高 *sence 分享場景 0:分享到對話,1:朋友圈 ,2:分享到收藏 */ public static void Image(Bitmap bmp, int width, int height, int sence) { //初始化 WXImageObject 和 WXMediaMessage 對象 WXImageObject imgObj = new WXImageObject(bmp); WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = imgObj; //設置縮略圖 Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, width, height, true); //bmp.recycle(); msg.thumbData = bmpToByteArray(thumbBmp); //構造一個Req SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("img"); req.message = msg; req.scene = sence; req.userOpenId = App.userInfo.getOpenId(); //調用api接口,發送數據到微信 App.iwxapi.sendReq(req); }
分享鏈接
/** *url: 分享鏈接 *title: 分享標題 *desc: 分享描述 *thumbBmp: 分享縮略圖 *sence: 分享場景 0:分享到對話,1:朋友圈 ,2:分享到收藏 */ public static void Url(String url, String title, String desc, Bitmap thumbBmp, int sence) { //初始化一個WXWebpageObject,填寫url WXWebpageObject webpage = new WXWebpageObject(); webpage.webpageUrl = url; //用 WXWebpageObject 對象初始化一個 WXMediaMessage 對象 WXMediaMessage msg = new WXMediaMessage(webpage); msg.title = title; msg.description = desc; msg.thumbData = bmpToByteArray(thumbBmp); //構造一個Req SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("webpage"); req.message = msg; req.scene = sence; req.userOpenId = App.userInfo.getOpenId(); //調用api接口,發送數據到微信 App.iwxapi.sendReq(req); }
倆輔助函數
private static String buildTransaction(String type) { return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis(); } private static byte[] bmpToByteArray(Bitmap bmp) { ByteArrayOutputStream output = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG, 100, output); byte[] result = output.toByteArray(); try { output.close(); } catch (Exception e) { e.printStackTrace(); } return result; }
這個逼庫經常加載失敗,時不時的抽風
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
解決辦法:把包給down 下來,手動加載 ,在這里:https://bintray.com/wechat-sdk-team/maven
下載對應版本庫如: wechat-sdk-android-without-mta-6.6.5.aar,放到libs目錄,手動加載即可
android { compileSdkVersion 28 repositories { //本地aar方式 flatDir { dirs 'libs' //this way we can find the .aar file in libs folder } } } implementation(name: 'wechat-sdk-android-without-mta-6.6.5', ext: 'aar')
分享之后關閉不掉的問題,也就是finish失效
事實上在回調之后,不是BaseResp.ErrCode.ERR_OK
就完了,這里面得還有一層邏輯判斷:
public void onResp(BaseResp baseResp) { switch (baseResp.errCode) { case BaseResp.ErrCode.ERR_OK: // 在此處應該還需要判斷 回調成功類型。是登錄還是分享,然后做相對應的操作 switch (baseResp.getType()) { case ConstantsAPI.COMMAND_SENDAUTH: //登錄成功的回調 String code = ((SendAuth.Resp) baseResp).code; // 登錄 todo break; case ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX: //分享成功 // 分享 todo Toast.makeText(getApplicationContext(), "分享成功!", Toast.LENGTH_LONG).show(); finish(); break; default: finish(); break; } case BaseResp.ErrCode.ERR_USER_CANCEL://用戶取消 finish(); break; default: finish(); break; } }
以上是“java如何實現安卓app和微信授權登錄功能”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。