Android 原生app获取用户授权访问Autodesk云应用数据

发布时间:2019-08-06 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Android 原生app获取用户授权访问Autodesk云应用数据脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

oAuth机制对于网站间的授权管理是很容易实现的,设置好app回调端口,当数据服务提供方拿到其用户授权,则返回授权码发送到回调端口。上一篇文章介绍了如何授权Forge app访问Autodesk 云应用数据,即,获取三条腿的token。

但移动端的原生app,授权码返回到发起请求app的某个ActivITy,可如何得知是哪个Activity并且跳转到此Activity?这时就要用到URL Scheme。iOS和AndROId都提供了这样的机制。它实现了页面内跳转协议,通过定义自己的scheme协议,非常方便跳转到app中的各个Activity。也让不同app可以唤起其它app的Activity。当然,前提app已经安装到系统。这位大咖对此话题做了专业的讲解,推荐大家先阅读:
https://www.jianshu.com/p/7b0...

我的同事Bryan搭建了一个框架,演示Android app 集成Forge oAuth,拿到三条腿token,并调用了用户信息(PRofile)API,列出登录用户的在Forge数据管理中的基本信息。该框架很好的展示了使用URL Scheme整个过程。
https://github.com/dukedhx/oa...

我借此学习了有关内容。另外,基于此代码,略微改造,添加流程展示获取Autodesk应用的Hub,Project,Folder和File,为进一步的综合应用app做一些铺垫。
https://github.com/xiaodongli...

Android 原生app获取用户授权访问Autodesk云应用数据

oAuth相关的几个步骤:

1.定义监听oAuth回传的Activity属性

 <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
            <intent-filter>
                <data android:scheme="@string/FORGE_CALLBACK_SCHEME" android:host="@string/FORGE_CALLBACK_HOST"/>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
            </intent-filter>
 </activity>

其中,FORGE_CALLBACK_SCHEME和FORGE_CALLBACK_HOST定义为:

 <string name="FORGE_CALLBACK_SCHEME">lxdapp</string>
 <string name="FORGE_CALLBACK_HOST">mytest3legged</string>

同样的, URL Scheme必须和Forge app注册的时候填写的callback URL要一致。

Android 原生app获取用户授权访问Autodesk云应用数据

2.登录事件将创建一个Intent.ACTION_VIEW,用以启动网页,URL拼接了Forge app的client id,授权方式 (response_type=code),回传地址和授权的权限范围 跳转到Autodesk登录过程,等待客户授权。

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.用户授权后,将对URLScheme地址回传,也就是发起请求的Activity。Activity的OnStart拿到回传信息。由于没有设定android:mimetype, 则任何数据类型都可接收。但我们需要只是授权码,在回传请求的URL参数中。

 @override
    protected void onStart() {

        super.onStart();
        Intent intent = getIntent();

        Uri data = intent == null ? null : intent.getData();
        //从回传请求中拿到授权码
        String authorizationCode = data == null ? null : data.getQueryParameter("code");

        if (authorizationCode != null && !authorizationCode.iSEMpty()) {
        ......

4.接下来的过程就和常规的网页应用类似了,依授权码得到最终的token。

5.该样例调用Forge服务采取okhttP3,推荐参考下文的详细讲解:
https://www.jianshu.com/p/da4...

注:

  • Activity的URLScheme是可能同名的,而且如何保证应用之间跳转和传参的目标正确性,这方面我还在研究中。
  • 本例为方便计,将Forge Client Secret也存在了app之中。我想安全的方式是由app服务器端进行secret的管理,当原生app拿到授权码,通过它来向app服务器端发起请求,由app服务器来获取Forge token,再传回原生app。
  • 扩展的部分(Hub,Project,Folder和File)只是简单的替换ListView的内容,尚未对页面回退做处理。

脚本宝典总结

以上是脚本宝典为你收集整理的Android 原生app获取用户授权访问Autodesk云应用数据全部内容,希望文章能够帮你解决Android 原生app获取用户授权访问Autodesk云应用数据所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。