从 Android 应用程序验证 Strava 时出现问题

问题描述 投票:0回答:3

我已将此代码添加到清单文件中:

<data android:scheme="https"
                    android:host="strava"/>

然后调用隐式意图在strava中进行授权,如下所示:

btnConnect.setOnClickListener {
            val intentUri = Uri.parse("https://www.strava.com/oauth/mobile/authorize")
                .buildUpon()
                .appendQueryParameter("client_id", "CLIENT_ID")
                .appendQueryParameter("response_type", "code")
                .appendQueryParameter("approval_prompt", "auto")
                .appendQueryParameter("scope", "activity:read_all")
                .build()

            val intent = Intent(Intent.ACTION_VIEW, intentUri)
            startActivity(intent)
        }

但是在浏览器中出现这样的错误:

{"message":"Bad Request", "errors":[{"resource":"Application", "field":"redirect_url", "code":"invalid"}]}
android oauth oauth-2.0 strava
3个回答
1
投票

查看官方文档,第

Requesting Access > Mobile Applications > Android
部分。

您需要指定

redirect_uri
参数:

val intentUri = Uri.parse("https://www.strava.com/oauth/mobile/authorize")
        .buildUpon()
        .appendQueryParameter("client_id", "1234321")
        .appendQueryParameter("redirect_uri", "https://www.yourapp.com")
        .appendQueryParameter("response_type", "code")
        .appendQueryParameter("approval_prompt", "auto")
        .appendQueryParameter("scope", "activity:write,read")
        .build()

val intent = Intent(Intent.ACTION_VIEW, intentUri)
startActivity(intent)

0
投票

您需要让意图过滤器知道该过滤器是可浏览的(可以通过应用程序浏览器打开,例如chrome),这是必要的,因为您必须打开应用程序

<intent-filter>
   <action android:name="android.intent.action.VIEW" />
   <category android:name="android.intent.category.DEFAULT" />
   <category android:name="android.intent.category.BROWSABLE" />
   <data android:scheme="anyappname" android:host="redirect" />
</intent-filter>

创建意图时,您需要将 URI 指定为上面意图过滤器中的 URI:

Uri intentUri = Uri.parse("https://www.strava.com/oauth/mobile/authorize")
   .buildUpon()
   // add this redirect uri and change the "anyappname" and "redirect" names as needed
   .appendQueryParameter("redirect_uri", "anyappname://redirect")
   .build();

Intent intent = new Intent(Intent.ACTION_VIEW, intentUri);
startActivity(intent);

最后确保您已在 strava dashboard 上的 Strava 应用程序设置中设置了允许的域名。

这花了我很长时间才理解,所以我希望它有所帮助。


0
投票

有同样的问题,只是在指定意图过滤器时在 androidManifest.xml 文件中遗漏了:

© www.soinside.com 2019 - 2024. All rights reserved.