2016-07-13 5 views
1

githubで見つけたOneDrive Java APIを使用するスタンドアロンJavaアプリケーションがあります。すべてうまく動作します。Android用OneDrive SDKはサイレントモードでログインできません

は、だから私はすでにのclientid、クライアントシークレット、認証コードと完璧

仕事リフレッシュトークンは、今私は、Androidに切り替えたいと思っていたが、私は同じJava APIを使用して成功していませんでした。だからこそ私は、Microsoftが提供するOneDrive Android SDKの正式版に移行したかったのです。

すべてが異なるようです。私はすでに知られているのClientIDを使用して、以下のことを試してみました

final Activity me = this; 

    final MSAAuthenticator msaAuthenticator = new MSAAuthenticator() { 
     @Override 
     public String getClientId() { 
      return clientid; 
     } 

     @Override 
     public String[] getScopes() { 
      return new String[] { "onedrive.appfolder" }; 
     } 
    }; 

    final IClientConfig oneDriveConfig = DefaultClientConfig.createWithAuthenticator(
      msaAuthenticator); 

    final IOneDriveClient oneDriveClient = new OneDriveClient.Builder() 
      .fromConfig(oneDriveConfig) 
      .loginAndBuildClient(me); 

    oneDriveClient 
      .getDrive() 
      .buildRequest() 
      .get(new ICallback<Drive>() { 
       @Override 
       public void success(final Drive result) { 
        final String msg = "Found Drive " + result.id; 
        Toast.makeText(me, msg, Toast.LENGTH_SHORT) 
          .show(); 
       } 

       @Override 
       public void failure(ClientException ex) { 
        final String msg = "Error"; 
        Toast.makeText(me, msg, Toast.LENGTH_SHORT) 
          .show(); 
       } 
      }); 

logcatでライン.loginAndBuildClient(me)

を実行しながらそれは、一見無限ループで終わる、私はそれが例外を抑制していることがわかり

07-13 12:32:17.082 28175-28271/org.xxxxxxx.xxxxxxxxx E/MSAAuthenticator$5[onAuthComplete] - 314: 

Failed silent login, interactive login required 

    com.onedrive.sdk.authentication.ClientAuthenticatorException: Failed silent login, interactive login required 
     at com.onedrive.sdk.authentication.MSAAuthenticator$5.onAuthComplete(MSAAuthenticator.java:312) 

情報メッセージもあります:

07-13 12:32:17.079 28175-28271/org.xxxxxxx.xxxxxxxxx I/LiveAuthClient: 
    No refresh token available, sorry! 
07-13 12:32:17.079 28175-28271/org.xxxxxxx.xxxxxxxxx I/LiveAuthClient: 
    All tokens expired, you need to call login() to initiate interactive logon 

Obvio uslyそれはどういうわけか、対話的なログインを実行したいし、ひどく失敗します。

理解できないこと:私は既に完全に有効なリフレッシュトークンを再利用したいと思いますが、MS OneDrive SDKでこれを行う方法が見つかりませんでした。

誰かが私を助けることができますか?

+0

ログイン時に完全なログキャストを貼り付けることはできますか? UIの表示を妨げる​​前にエラーが発生していない場合は、メッセージの1つとして「ログインを開始しています」と表示されることが予想されます。 –

+0

*どのUIが表示されるべきかを知ることは既にうれしいでしょう。私はそのケースのためのUIを開発していないので、私はそれが私のアプリの外にあると期待していますか? – devnull69

答えて

0

私は、(SDKを使用せずに)手動でOneDrive APIへのアクセスを実装するために管理し、それは私が「唯一」のアプリのためのインターネットアクセス権を設定するのを忘れ判明

を働きました。私のアプリが黙って失敗する原因となったのは本当に奇妙なことです。

1

この投稿は少し古いですが、私は他人を助けるために私の解決策を共有したいと思っていました。

private IOneDriveClient mOneDriveClient; 

は、コールバックで「loginAndBuildClient」メソッドを使用します。

final IOneDriveClient oneDriveClient = new OneDriveClient.Builder() 
     .fromConfig(oneDriveConfig) 
     .loginAndBuildClient(me); 

がグローバルOneDriveClientを宣言します。その代わり、このように、唯一の活動パラメータで、このメソッド「loginAndBuildClient」を使用しての

パラメータ。 OneDriveClientを「成功」の方法で割り当てます。

new OneDriveClient.Builder() 
       .fromConfig(DefaultClientConfig.createWithAuthenticator(msaAuthenticator)) 
       .loginAndBuildClient(MainActivity.this, new ICallback<IOneDriveClient>() { 
        @Override 
        public void success(IOneDriveClient iOneDriveClient) { 
         mOneDriveClient = iOneDriveClient; 
        } 

        @Override 
        public void failure(ClientException ex) { 
         mOneDriveClient = null; 
        } 
       }); 
関連する問題