我已将此代码添加到清单文件中:
<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"}]}
查看官方文档,第
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)
您需要让意图过滤器知道该过滤器是可浏览的(可以通过应用程序浏览器打开,例如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 应用程序设置中设置了允许的域名。
这花了我很长时间才理解,所以我希望它有所帮助。
有同样的问题,只是在指定意图过滤器时在 androidManifest.xml 文件中遗漏了: