新來的機器人,練習3腿Oauth與FitBark API。我已經在Android Studio之外工作了。FitBark Oauth授權代碼重定向停留在循環
- 第一站,Chrome瀏覽器,成功獲取用戶允許訪問應用程序屏幕並獲取授權代碼。
- Second Leg,POSTMAN使用授權碼,成功獲取訪問令牌。
- 第三條規則,使用終端中的curl和訪問令牌,成功返回JSON和Get User Info API端點的用戶配置文件信息。
不Android Studio中的工作:
我卡在首回合Android Studio中。我正在使用Retrofit Oauth tutorial。
我可以啓動第一條腿,應用程序在瀏覽器中打開FitBark登錄屏幕,我可以以用戶身份登錄。
一旦是一個完整的,瀏覽器重定向到另一個頁面,並顯示該授權碼。
不過,我不希望它打開瀏覽器並顯示該授權碼。我希望它在登錄/允許訪問後重定向迴應用程序。一旦它重新導向到我的應用程序,我的理解是我可以在Intent中捕獲響應(我認爲它是認證代碼),並通過.getData()獲取它。堆棧等地都指向添加特定的代碼到Android清單,在意圖過濾器,在我發起的第一站呼叫活動
改裝指南和各種來源。
的FitBark REDIRECT_URI與我的憑據來了:
urn:ietf:wg:oauth:2.0:oob
設置爲FITBARK_REDIRECT
恆定在我登錄活動(在的onCreate)進行測試,以獲取授權代碼:
public void getAuthCode(){
Intent intent = new Intent(
Intent.ACTION_VIEW,
Uri.parse(ServiceGenerator.FITBARK_BASE_URL + "/authorize?response_type=code&client_credentials&" + "client_id=" +FITBARK_CLIENT_ID + "&redirect_uri=" + FITBARK_REDIRECT));
startActivity(intent);
}
我的onResume在登錄活動中,應該從Intent獲取數據。此代碼確實會觸發,但我從getIntent.getData()
收到空值。
@Override
protected void onResume() {
super.onResume();
// the intent filter defined in AndroidManifest will handle the return from ACTION_VIEW intent
Uri uri = getIntent().getData();
if (uri == null){
Log.d("On RESUME", "Gets Here");
}
if (uri != null && uri.toString().startsWith(intentRedirect)) {
// use the parameter your API exposes for the code (mostly it's "code")
String code = uri.getQueryParameter("code");
Log.d("CODE", code);
if (code != null) {
// get access token
// we'll do that in a minute
} else if (uri.getQueryParameter("error") != null) {
Log.d("ERROR URI", "ERROR ERROR ERROR");
}
}
}
我的Android清單
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.macbook.retrofit">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".LoginActivity">
<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:host="app.open"
android:scheme="myapp" />
</intent-filter>
</activity>
</application>
</manifest>
從閱讀指南,我的理解是android:host
和android:scheme
需要與我在FitBark第一支路呼叫REDIRECT_URI匹配。所以,我已經試過了由加載的myapp://app.open」的號召
Uri.parse(ServiceGenerator.FITBARK_BASE_URL + "/authorize?response_type=code&client_credentials&" + "client_id=" +FITBARK_CLIENT_ID + "&redirect_uri=" + "myapp://app.open"));
startActivity(intent);
加入之前。‘MYAPP://app.open’,我將其設置爲自定義穿過FitBark的API重定向終點站。
curl -X POST -H "Authorization: Bearer <My Token Value goes Here>" -H
"Content-Type: application/json" -d
'{"redirect_uri":"urn:ietf:wg:oauth:2.0:oob\rmyapp://app.open"}'
"https://app.fitbark.com/api/v2/redirect_urls"
循環:
當我點擊(上主)按鈕啓動登錄活動中,getAuthCode()在登錄的OnCreate火災。瀏覽器打開,然後它陷入循環。
所以,那就是我所在的位置。我想獲得授權碼並在第二段中使用它,但我無法弄清楚。請幫忙!!!