Java 深度链接以检索授权代码

Java 深度链接以检索授权代码,java,android,oauth-2.0,authorization,httprequest,Java,Android,Oauth 2.0,Authorization,Httprequest,我非常执着于一个问题,我已经花了很多时间在这个问题上,还有很多不同的尝试和错误 我的应用程序使用OAuth 2.0向供应商(Kiteworks)发送图像,这是一个安全的存储设施。Kiteworks有自己的API来实现这一点 我的应用程序正在启动他们的登录页面,用户登录并被重定向到包含授权代码的回调URL 我现在试图实现的是,一旦点击此页面,它会再次定向到我的应用程序,但最重要的是,它会携带授权码,以便我可以使用它交换令牌,以便发送图像 下面是我尝试过的代码,它让我可以用我的应用程序打开重定向ur

我非常执着于一个问题,我已经花了很多时间在这个问题上,还有很多不同的尝试和错误

我的应用程序使用OAuth 2.0向供应商(Kiteworks)发送图像,这是一个安全的存储设施。Kiteworks有自己的API来实现这一点

我的应用程序正在启动他们的登录页面,用户登录并被重定向到包含授权代码的回调URL

我现在试图实现的是,一旦点击此页面,它会再次定向到我的应用程序,但最重要的是,它会携带授权码,以便我可以使用它交换令牌,以便发送图像

下面是我尝试过的代码,它让我可以用我的应用程序打开重定向url(让我可以选择应用程序或chrome)。我希望当我选择应用程序时,它会存储授权代码,但事实并非如此:

舱单:

 <activity
        android:name=".Kiteworks_SignIn"
        android:launchMode="singleTop"
        android:noHistory="true"
        android:screenOrientation="behind"
        android:exported="true" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.LAUNCHER" />
            <!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
            <data android:scheme="https"
                android:host="sync.almacgroup.com"
                android:pathPrefix="/rest/callback">
                <!--https://sync.almacgroup.com/oauth/authorize?client_id=1fb7c350-bb6a-5741-86b9-43afc2f1642f&redirect_uri=https://sync.almacgroup.com/rest/callback.html?display%3Dmobile&response_type=code&scope=&m=1&force_login=1-->
            </data>
                          />
            <action android:name="android.intent.action.MAIN" />
        </intent-filter>
    </activity>
有没有人知道我哪里出了问题,或者用其他方法来实现这一点


任何帮助都将不胜感激:)

您的查询参数是
redirect\u uri
而不是code。在解析
redirect\u uri

之后,您需要解析名为
code
的参数。此外,我不确定是否覆盖onActivityResult以获取意图数据。因为我从未发送过Intent.ACTION\u使用startActivityForResult查看Intent,所以我不确定这是否有效。您可能需要重写onNewIntent方法以获取deeplink数据。您是否可以编辑我的代码以包含您建议的内容?这将是一个很大的帮助,因为我只是新的东西!看来我没有正确地检索到它,有什么更好的方法吗?@Kling Klang有什么想法吗?没有,对不起。我以前从未使用过深度链接。你最终找到了有效的解决方案吗?一个客户端要求我将我的php应用程序连接到KiteWorks,但我不确定我是否能够实现它。我在网上找不到例子。
browser = findViewById(R.id.buttonBrowser);

    browser.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            browserIntent = new Intent(Intent.ACTION_VIEW, uri);
            startActivityForResult(browserIntent, authcode);

            if (browserIntent != null && browserIntent.getData() != null && "https://sync.almacgroup.com/oauth/authorize?client_id=1fb7c350-bb6a-5741-86b9-43afc2f1642f&redirect_uri=https://sync.almacgroup.com/rest/callback.html?display%3Dmobile&response_type=code&scope=&m=1&force_login=1".equals(browserIntent.getData().getScheme())) {
                authcode  = Integer.parseInt(getIntent().getData().getQueryParameter("code"));
                // complete oauth flow
                setResult(Activity.RESULT_OK);
                finish();
            } else {
                Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://sync.almacgroup.com/oauth/authorize?client_id=1fb7c350-bb6a-5741-86b9-43afc2f1642f&redirect_uri=https://sync.almacgroup.com/rest/callback.html?display%3Dmobile&response_type=code&scope=&m=1&force_login=1"))
                        .setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_FROM_BACKGROUND);
                startActivityForResult(browserIntent, authcode);
                setResult(Activity.RESULT_OK);
                finish();
            }
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    try {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE  && resultCode  == RESULT_OK) {
            authcode  = Integer.parseInt(getIntent().getData().getQueryParameter("code"));
            Toast.makeText(this, authcode, Toast.LENGTH_SHORT).show();
        }
    } catch (Exception ex) {
        Toast.makeText(Kiteworks_SignIn.this, ex.toString(),
                Toast.LENGTH_LONG).show();
    }
}