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

栏目: IOS · Android · 发布时间: 5年前

内容简介:oAuth机制对于网站间的授权管理是很容易实现的,设置好app回调端口,当数据服务提供方拿到其用户授权,则返回授权码发送到回调端口。上一篇文章介绍了1.定义监听oAuth回传的Activity属性

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云应用数据》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

精通Windows应用开发

精通Windows应用开发

[美] Jesse Liberty Philip Japikse Jon Galloway / 苏宝龙 / 人民邮电出版社 / 59.00元

Windows 8.1的出现不仅提供了跨设备的用户体验,也提供了跨设备的开发体验。本书着眼于实际项目中所需要的特性,以及现有C#编程知识的运用,对如何最大限度地利用Metro、WinRT和Windows 8进行了讲解,内容详尽,注重理论学习与实践开发的配合。 Windows 8.1和WinRT的作用及其特殊性 如何使用先进特性创建具有沉浸感和吸引力的Windows 8.1应用 如......一起来看看 《精通Windows应用开发》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具