Android Chrome自定义选项卡/ Fitbit Web API将不会redirect,如果应用程序已被授权。 (OAuth2.0的)

我打算创build一个第三方fitbit应用程序的闹钟同步。

不过,在注册我的应用程序时,我遇到了一些困难,即使您的客户端已经注册到应用程序,也更明确地获取访问令牌。 (考虑到用户重新安装他的应用程序的情况)。

我正在使用Chrome自定义选项卡(因为FitBit禁止使用WebView)来请求访问令牌:

String url = "https://www.fitbit.com/oauth2/authorize?" + "response_type=token" + "&client_id=XXXXXX" + "&scope=activity"+ "&redirect_uri=fitbittester://logincallback"; customTabsIntent.launchUrl(MainActivity.this, Uri.parse(url)); 

redirect到使用意图filter定义的自定义scheme后:

 <activity android:name=".TestActivity" android:label="TestActivity" android:theme="@style/AppTheme.NoActionBar"> <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="fitbittester" android:host="logincallback" /> </intent-filter> </activity> 

TestActivity应该启动,我将从给定的Intent获取我的AccessToken:

 public class TestActivity extends AppCompatActivity { String string; @Override protected void onNewIntent(Intent intent) { string = intent.getDataString(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); onNewIntent(getIntent()); Toast.makeText(TestActivity.this, string , Toast.LENGTH_LONG).show(); Log.e("TAG", string); Log.e("TAG", string.substring(string.indexOf("&access_token")+14)); } 

}

一切工作正常第一次运行(提供的事实,客户端尚未授权),但之后,如果要再次获取我的访问令牌(我知道我应该存储在本地 – SharedPreferences最有可能的,但这是用于testing目的只)铬自定义选项卡将打开并保持在一个空的页面(显然它不会正确redirect)。

我已经阅读了FitBit WEB API,它说:如果使用隐式授权stream程的应用程序在先前发布的访问令牌过期之前将用户发送到授权页面,则除非范围增加,否则不会提示用户。 用户将被立即redirect到具有访问令牌的应用程序。

所以我的问题是如果我在思考这个问题上有错误还是
一个铬自定义选项卡错误,我应该拦截?

非常感谢你提前。

Related of "Android Chrome自定义选项卡/ Fitbit Web API将不会redirect,如果应用程序已被授权。 (OAuth2.0的)"

我find了解决这个问题的办法。 基本上我在Url中插入一个新的参数与Fitbit API的查询。 (“&prompt = login”)。 该参数将提示用户在每次查询授权令牌时重新login,如果已经login,则将其注销。

所以我猜fitbit会在用户已经login时做302redirect。所以我使用了这个解决scheme(将这个解决scheme与Chrome标签demo中的 CustomTabActivityHelper混合在一起),并解决了这个问题。 好极了。

我能够通过在加载redirect的URL之前调用热身函数来“修复”问题。

Chrome自定义标签redirect到Android应用将closures该应用