国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 微信小程序 微信開發(fā) 圖文詳解Android開發(fā)微信授權登錄與微信分享解析

圖文詳解Android開發(fā)微信授權登錄與微信分享解析

Mar 15, 2017 pm 05:19 PM

本篇文章主要介紹了圖文詳解Android開發(fā)微信授權登錄與微信分享解析,具有一定的參考價值,有需要的可以了解一下。

?前言

在移動互聯(lián)網浪潮中,聯(lián)網APP已經把單機拍死在沙灘上,很多公司都希望自家應用能夠有一套帳號系統(tǒng),可是許多用戶卻并不一定買賬:我憑啥注冊你家應用的帳號?微博,微信,QQ幾乎成了每個人手機中的必裝應用,于是微信,微博,QQ說了:來來來,你們都可以用我家的帳號登錄你家應用,只要你遵循OAuth2.0協(xié)議標準就行。于是第三方社交帳號登陸成為了許多新興應用的選擇,由于騰訊官方微信開放平臺的在線文檔相對最新的SDK有些出入,并且登錄相關的文檔結構次序有些紊亂,今天就把我的一些經驗記錄在此,對微信開放平臺官方的在線文檔進行一定的整理。同時微信分享可以擴大自身APP影響力,于是微信分享功能也是很多開發(fā)者需要的功能,一并整理在此,希望能對后來的同道朋友有所幫助。

微信登錄

以下部分內容摘自騰訊開放平臺:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317851&token=6bfe3acd2969037c7217667f24f8eeaf714e5113&lang=zh_CN

授權流程說明

微信OAuth2.0授權登錄讓微信用戶使用微信身份安全登錄第三方應用或網站,在微信用戶授權登錄已接入微信OAuth2.0的第三方應用后,第三方可以獲取到用戶的接口調用憑證(access_token),通過access_token可以進行微信開放平臺授權關系接口調用,從而可實現(xiàn)獲取微信用戶基本開放信息和幫助用戶實現(xiàn)基礎開放功能等。?

?微信OAuth2.0授權登錄目前支持authorization_code模式,適用于擁有server端的應用授權。該模式整體流程為:

1. 第三方發(fā)起微信授權登錄請求,微信用戶允許授權第三方應用后,微信會拉起應用或重定向到第三方網站,并且?guī)鲜跈嗯R時票據code參數(shù);

2. 通過code參數(shù)加上AppID和AppSecret等,通過API換取access_token;

3. 通過access_token進行接口調用,獲取用戶基本數(shù)據資源或幫助用戶實現(xiàn)基本操作。?

獲取access_token時序圖:

注意:如果開發(fā)者需要調用登錄接口,需要進行進行開發(fā)者認證并交300大洋,官方在線文檔說無需繳費,其實那已經是過去式了,只是在線文檔沒有更新而異。

下面將依次講解微信授權登錄流程。所有網絡請求均為GET請求。

1、獲取臨時票據code

2、獲取access_token & openid

3、檢查access_token是否有效

4、刷新或續(xù)期access_token

5、獲取微信用戶詳細信息

獲取臨時票據code

前三條向右的箭頭


{ 
  // 發(fā)出授權申請
  Final SendAuth.Req req = new SendAuth.Req();
  req.scope = "snsapi_userinfo";
  req.state = "wechat_sdk_微信登錄,分享demo_test";
  api.sendReq(req);
}

上兩條箭頭向左的流程在代碼體現(xiàn)出來的就是:


public void onResp(BaseResp resp) ;// 這個回調接口位于IWXAPIEventHandler中

返回的數(shù)據為resp,用作請求登錄授權時,它是SendAuth.Resp的實例,攜帶的數(shù)據有:

  1. ErrorCode:ERR_OK = 0(用戶同意);ERR_AUTH_DENIED = -4(用戶拒絕授權);ERR_USER_CANCEL = -2(用戶取消)

  2. code:用戶換取access_token的code,僅在ErrCode為0時有效

  3. state:第三方程序發(fā)送時用來標識其請求的唯一性的標志,由第三方程序調用sendReq時傳入,由微信終端回傳,state字符串長度不能超過1K

  4. lang:微信客戶端當前語言

  5. country:微信客戶端當前國家

以上數(shù)據均以static String形式存在SendAuth.Resp的resp對象中。

注意:當使用微信提供最新的SDK/library時,上面有些數(shù)據是不存在,微信開放平臺的文檔和API及SDK沒有同步更新。讀者可使用最下方微信登錄,分享demo中的筆者使用的jar包構建工程。

獲取access_token & openid

最后一條向右的箭頭表示:使用得到的code,獲取access_token,openid,接口為:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

注意:微信的接口鏈接是使用SSL的安全鏈接,普通的HttpClient訪問會導致應用崩潰或報錯,詳細方法請下載最下方的微信登錄,分享demo代碼

參數(shù)說明

  • appid: 應用唯一標識,在微信開放平臺提交應用審核通過后獲得

  • secret:應用密鑰AppSecret,在微信開放平臺提交應用審核通過后獲得

  • code :填寫第一步獲取的code參數(shù)

  • grant_type:固定值,填authorization_code

最下方向左的箭頭表示使用code訪問完鏈接返回的數(shù)據,json攜帶的數(shù)據有:

  • access_token:接口調用憑證

  • expires_in:access_token的有效期,一般為7200(秒),也即是兩小時

  • refresh_token:用戶刷新access_token

  • openid:授權用戶唯一標識

  • scope:用戶授權的作用域,使用逗號(,)分隔

檢查access_token是否有效

由于access_token有效期為兩小時,所以進行下一步操作前最好進行一次檢查,接口為:
https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID

傳入的參數(shù)為accesss_token和openid。

access_token有效時返回的json是:


{ 
"errcode":0,"errmsg":"ok"
}

失效時的返回數(shù)據為:


{ 
"errcode":40003,"errmsg":"invalid openid"
}

如果access_token有效,則跳過下一步,失效時需要刷新或續(xù)期access_token。

刷新或續(xù)期access_token

接口說明

access_token是調用授權關系接口的調用憑證,由于access_token有效期(目前為2個小時)較短,當access_token超時后,可以使用refresh_token進行刷新,access_token刷新結果有兩種:

1.若access_token已超時,那么進行refresh_token會獲取一個新的access_token,新的超時時間;

2.若access_token未超時,那么進行refresh_token不會改變access_token,但超時時間會刷新,相當于續(xù)期access_token。

refresh_token擁有較長的有效期(30天),當refresh_token失效的后,需要用戶重新授權。

刷新accessToken接口為:
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

參數(shù)說明:

  • appid:應用唯一標識

  • grant_type:固定值,填refresh_token

  • refresh_token:填寫前面獲取到的refresh_token的值

返回的json數(shù)據有:

  • access_token:接口調用憑證

  • expires_in:access_token接口調用憑證超時時間,單位(秒)

  • refresh_token:用戶刷新access_token

  • openid:授權用戶唯一標識

  • scope:用戶授權的作用域,使用逗號(,)分隔

獲取微信用戶詳細信息

獲取access_token,openid后,就可以用來獲取更多用戶信息,比如微信昵稱,頭像,性別等。接口為:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

可獲取的json攜帶的數(shù)據有:

  • openid:普通用戶的標識,對當前開發(fā)者帳號唯一

  • nickname:普通用戶昵稱

  • sex:普通用戶性別,1為男性,2為女性

  • province:普通用戶個人資料填寫的省份

  • city:普通用戶個人資料填寫的城市

  • country:國家,如中國為CN

  • headimgurl:用戶頭像,最后一個數(shù)值代表正方形頭像大?。ㄓ?、46、64、96、132數(shù)值可選,0代表640*640正方形頭像),用戶沒有頭像時該項為空

  • privilege:用戶特權信息,json數(shù)組,如微信沃卡用戶為(chinaunicom)

  • unionid:用戶統(tǒng)一標識。針對一個微信開放平臺帳號下的應用,同一用戶的unionid是唯一的。

微信官方建議:

開發(fā)者最好保存unionID信息,以便以后在不同應用之間進行用戶信息互通。

微信登錄的流程結束了, 至于開發(fā)者需要將那些用戶信息上傳到自家的app服務器就取決于開發(fā)者了。

微信分享

1、微信分享分為微信好友分享,朋友圈分享,當然,還有收藏也是共用分享的接口,無需授權登錄即可調用分享接口。

2、由于好友分享,朋友圈分享和收藏只是一個參數(shù)的區(qū)別,所以下面只講好友分享,具體的可以下載最下方的微信登錄,分享demo源碼進行查看。

3、微信可以分享的內容包括,純文字,圖片,鏈接,音樂,視頻,app,emoji表情等。

微信分享流程

1、在你的工程里面新建一個wxapi包,并且新建一個WXEntryActivity,繼承Activity,或其他Activity(這兩步是必須的,微信開發(fā)文檔中有提到),詳見:
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417751808&token=&lang=zh_CN

2、并在manifest文件里面加上exported屬性,設置為true。

3、實現(xiàn)一個IWXAPIEventHandler接口。

微信發(fā)送的請求將回調到onReq方法,發(fā)送到微信請求的響應結果將回調到onResp方法

在WXEntryActivity中將接收到的intent及實現(xiàn)了IWXAPIEventHandler接口的對象傳遞給IWXAPI接口的handleIntent方法,示例如下:


api.handleIntent(getInent(),this);

當微信發(fā)送請求到你的應用,將通過IWXAPIEventHandler接口的onReq方法進行回調,類似的,應用請求微信的響應結果將通過onResp回調。

注意

如果需要混淆代碼,為了保證sdk的正常使用,需要在proguard.cfg加上下面兩行配置:


-keep class com.tencent.mm.sdk.** { 
 *; 
 }

微信分享詳細代碼流程是:


IWXAPI api = WXAPIFactory.createWXAPI(this, APP_ID, false);// 傳入申請到的appid,得到一個IWXAPI的實例
api.registerApp(APP_ID);// 將app注冊到微信列表,我不知道這是什么意思,有知道的請告訴我,謝謝!

// 開始分享純文本到給好友
WXTextObject textObj = new WXTextObject();
textObj.text = text;

// 用WXTextObject對象初始化一個WXMediaMessage對象
WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = textObj;

// 發(fā)送文本類型的消息時,title字段不起作用
// msg.title = "Will be ignored";
msg.title = "分享文字標題";
msg.description = text;

// 構造一個Req
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("text"); // transaction字段用于唯一標識一個請求
req.message = msg;

req.scene = SendMessageToWX.Req.WXSceneTimeline;// 表示發(fā)送場景為朋友圈,這個代表分享到朋友圈
// req.scene = SendMessageToWX.Req.WXSceneSession;//表示發(fā)送場景為好友對話,這個代表分享給好友
// req.scene = SendMessageToWX.Req.WXSceneFavorite;// 表示發(fā)送場景為收藏,這個代表添加到微信收藏
// 調用api接口發(fā)送數(shù)據到微信 
api.sendReq(req);

上面大致的表現(xiàn)了一個分享純文本給好友的場景,如果需要分享到朋友圈,只需要更改req.scene字段值。

1、其中IWXAPI.registerAPP(APP_ID)是官方demo中的一行代碼,表示的是將app注冊到微信列表,我并不知道有什么用,所謂的微信列表出現(xiàn)在哪兒?該行代碼刪除后,仍然可以獲取登錄授權,實現(xiàn)分享等功能。有知道的請告訴我,謝謝!

2、目前筆者遇到無法分享在線圖片WXImageObject的問題,分享在線圖片時出現(xiàn)分享界面右上角“發(fā)送”按鈕灰色,無法點擊的情況,希望分享成功的朋友告訴我,謝謝!問題如下圖

要分享鏈接,圖片,音樂,視頻等需要將WXTextObject 對象改成對應的obj對象。詳細請下載文章下方的微信登錄,分享demo。

后記

由于微信官方demo中并未提供微信登錄的代碼示例,分享的代碼很齊全,可是分享在線圖片的代碼在我這里卻又問題,所以筆者將自己的一些經驗和遇到的坑總結在這里,包括了微信第三方登錄,微信分享的內容,希望對大家有所幫助。也希望筆者在文中提到的問題有熱心人能夠解答


//1、 注冊到微信列表有什么用,微信列表在哪兒可以看到
IWXAPI.registerApp(APP_ID);
//2、 我為什么無法使用以下代碼分享在線圖片
WXImageObject imgObj = new WXImageObject();
imgObj.imageUrl = imgUrl;// 在線圖片鏈接

WXMediaMessage msg = new WXMediaMessage();
msg.mediaObject = imgObj;

Bitmap bmp = BitmapFactory.decodeStream(new URL(url).openStream());
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, THUMB_SIZE, THUMB_SIZE, true);
bmp.recycle();
msg.thumbData = Util.bmpToByteArray(thumbBmp, true);

SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("img");
req.message = msg;
req.scene = isTimelineCb.isChecked() ? SendMessageToWX.Req.WXSceneTimeline : SendMessageToWX.Req.WXSceneSession;
api.sendReq(req);

最近有人向我反映生成的apk無法正常運行。在此進行解釋:

demo源碼生成的apk不可正常運行的原因是:在微信開放平臺添加應用時,包名,應用簽名,app_id是綁定的。你們簽名的apk不起作用,demo代碼僅供參考交流。

以上是圖文詳解Android開發(fā)微信授權登錄與微信分享解析的詳細內容。更多信息請關注PHP中文網其他相關文章!

本站聲明
本文內容由網友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276