2017-06-18 42 views
1

新來的機器人,練習3腿Oauth與FitBark API。我已經在Android Studio之外工作了。FitBark Oauth授權代碼重定向停留在循環

  1. 第一站,Chrome瀏覽器,成功獲取用戶允許訪問應用程序屏幕並獲取授權代碼。
  2. Second Leg,POSTMAN使用授權碼,成功獲取訪問令牌。
  3. 第三條規則,使用終端中的curl和訪問令牌,成功返回JSON和Get User Info API端點的用戶配置文件信息。

不Android Studio中的工作:

我卡在首回合Android Studio中。我正在使用Retrofit Oauth tutorial

我可以啓動第一條腿,應用程序在瀏覽器中打開FitBark登錄屏幕,我可以以用戶身份登錄。

enter image description here

一旦是一個完整的,瀏覽器重定向到另一個頁面,並顯示該授權碼。

enter image description here

不過,我不希望它打開瀏覽器並顯示該授權碼。我希望它在登錄/允許訪問後重定向迴應用程序。一旦它重新導向到我的應用程序,我的理解是我可以在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:hostandroid: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火災。瀏覽器打開,然後它陷入循環。

所以,那就是我所在的位置。我想獲得授權碼並在第二段中使用它,但我無法弄清楚。請幫忙!!!

enter image description here

回答

0

想通了,感謝橡膠與我回避這個:)

我有我的getAuthCode()在我的onCreate的活動...

活動呼籲getAuth getAuth重定向回活動...再次創建...

杜赫。