android获取app用户数据,Android 原生app获取用户授权访问Autodesk云应用数据
oAuth機(jī)制對(duì)于網(wǎng)站間的授權(quán)管理是很容易實(shí)現(xiàn)的,設(shè)置好app回調(diào)端口,當(dāng)數(shù)據(jù)服務(wù)提供方拿到其用戶授權(quán),則返回授權(quán)碼發(fā)送到回調(diào)端口。上一篇文章介紹了如何授權(quán)Forge app訪問(wèn)Autodesk 云應(yīng)用數(shù)據(jù),即,獲取三條腿的token。
但移動(dòng)端的原生app,授權(quán)碼返回到發(fā)起請(qǐng)求app的某個(gè)Activity,可如何得知是哪個(gè)Activity并且跳轉(zhuǎn)到此Activity?這時(shí)就要用到URL Scheme。iOS和Android都提供了這樣的機(jī)制。它實(shí)現(xiàn)了頁(yè)面內(nèi)跳轉(zhuǎn)協(xié)議,通過(guò)定義自己的scheme協(xié)議,非常方便跳轉(zhuǎn)到app中的各個(gè)Activity。也讓不同app可以喚起其它app的Activity。當(dāng)然,前提app已經(jīng)安裝到系統(tǒng)。這位大咖對(duì)此話題做了專業(yè)的講解,推薦大家先閱讀:
https://www.jianshu.com/p/7b0...
我的同事Bryan搭建了一個(gè)框架,演示Android app 集成Forge oAuth,拿到三條腿token,并調(diào)用了用戶信息(Profile)API,列出登錄用戶的在Forge數(shù)據(jù)管理中的基本信息。該框架很好的展示了使用URL Scheme整個(gè)過(guò)程。
https://github.com/dukedhx/oa...
我借此學(xué)習(xí)了有關(guān)內(nèi)容。另外,基于此代碼,略微改造,添加流程展示獲取Autodesk云應(yīng)用的Hub,Project,Folder和File,為進(jìn)一步的綜合應(yīng)用app做一些鋪墊。
https://github.com/xiaodongli...
oAuth相關(guān)的幾個(gè)步驟:
1.定義監(jiān)聽(tīng)oAuth回傳的Activity屬性
其中,FORGE_CALLBACK_SCHEME和FORGE_CALLBACK_HOST定義為:
lxdapp
mytest3legged
同樣的, URL Scheme必須和Forge app注冊(cè)的時(shí)候填寫的callback URL要一致。
2.登錄事件將創(chuàng)建一個(gè)Intent.ACTION_VIEW,用以啟動(dòng)網(wǎng)頁(yè),URL拼接了Forge app的client id,授權(quán)方式 (response_type=code),回傳地址和授權(quán)的權(quán)限范圍 跳轉(zhuǎn)到Autodesk登錄過(guò)程,等待客戶授權(quán)。
public void onLoginClick(View v) {
Intent i = new Intent(Intent.ACTION_VIEW);
Resources resources = getResources();
i.setData(Uri.parse(getResources().getString(R.string.FORGE_AUTHORIZATION_URL) + "?response_type=code&redirect_uri=" + this.getCallbackUrl() + "&scope=" + resources.getString(R.string.FORGE_SCOPE) + "&client_id=" + resources.getString(R.string.FORGE_CLIENT_ID)));
startActivity(i);
}
3.用戶授權(quán)后,將對(duì)URLScheme地址回傳,也就是發(fā)起請(qǐng)求的Activity。Activity的OnStart拿到回傳信息。由于沒(méi)有設(shè)定android:mimetype, 則任何數(shù)據(jù)類型都可接收。但我們需要只是授權(quán)碼,在回傳請(qǐng)求的URL參數(shù)中。
@Override
protected void onStart() {
super.onStart();
Intent intent = getIntent();
Uri data = intent == null ? null : intent.getData();
//從回傳請(qǐng)求中拿到授權(quán)碼
String authorizationCode = data == null ? null : data.getQueryParameter("code");
if (authorizationCode != null && !authorizationCode.isEmpty()) {
......
4.接下來(lái)的過(guò)程就和常規(guī)的網(wǎng)頁(yè)應(yīng)用類似了,依授權(quán)碼得到最終的token。
5.該樣例調(diào)用Forge服務(wù)采取okhttp3,推薦參考下文的詳細(xì)講解:
https://www.jianshu.com/p/da4...
注:
Activity的URLScheme是可能同名的,而且如何保證應(yīng)用之間跳轉(zhuǎn)和傳參的目標(biāo)正確性,這方面我還在研究中。
本例為方便計(jì),將Forge Client Secret也存在了app之中。我想安全的方式是由app服務(wù)器端進(jìn)行secret的管理,當(dāng)原生app拿到授權(quán)碼,通過(guò)它來(lái)向app服務(wù)器端發(fā)起請(qǐng)求,由app服務(wù)器來(lái)獲取Forge token,再傳回原生app。
擴(kuò)展的部分(Hub,Project,Folder和File)只是簡(jiǎn)單的替換ListView的內(nèi)容,尚未對(duì)頁(yè)面回退做處理。
總結(jié)
以上是生活随笔為你收集整理的android获取app用户数据,Android 原生app获取用户授权访问Autodesk云应用数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 中央空调出风口材质
- 下一篇: android 屏幕完美适配,Andro