AquireToken回调不起作用

时间:2017-04-18 14:21:06

标签: java android authentication adal

我的问题:当我从MainActivity中取出adal android aquireToken调用并将它们放在自己的AuthenticationManager类中时,回调似乎不起作用。我的AuthenticationManager类中有以下两种方法:

public void aquireSharePointToken(final Activity rootActivity, final Context applicationContext) {
    try {
        mAppContext = applicationContext;
        mActivity = rootActivity;
        mAuthContext= new AuthenticationContext(rootActivity, Constants.TEST_AUTHORITY, true);
        mAuthContext.acquireToken(rootActivity, Constants.TEST_SHAREPOINTRESOURCE, Constants.TEST_CLIENTID, Constants.TEST_REDIRECT, PromptBehavior.Auto, new AuthenticationCallback<AuthenticationResult>() {
            @Override
            public void onSuccess(AuthenticationResult result) {
                if (result == null || result.getAccessToken() == null
                        || result.getAccessToken().isEmpty()) {
                    Log.d(TAG, "Token is empty");
                } else {
                    // request is successful
                    Log.d(TAG, "Status:" + result.getStatus() + " Expired:"
                            + result.getExpiresOn().toString());
                }
                Log.d(TAG, "First Time Token: " + result.getAccessToken());
            }

            @Override
            public void onError(Exception exc) {
                if (exc instanceof AuthenticationException) {
                    Log.d(TAG, "Cancelled");
                } else {
                    Log.d(TAG, "Authentication error:" + exc.getMessage());
                }
            }
        });

    } catch (Exception e) {
        e.printStackTrace();
        Log.d(TAG, "Auth Error");
    }
}

public void aquireSharePointTokenSilently(final Activity rootActivity, final Context applicationContext) {
    try {
        mAppContext = applicationContext;
        mActivity = rootActivity;
        mAuthContext= new AuthenticationContext(rootActivity, Constants.TEST_AUTHORITY, true);
        mAuthContext.acquireTokenSilentAsync(Constants.TEST_SHAREPOINTRESOURCE, Constants.TEST_CLIENTID, getUserId(applicationContext), new AuthenticationCallback<AuthenticationResult>() {
            @Override
            public void onSuccess(AuthenticationResult result) {
                Log.d(TAG,"New Token: " + result.getAccessToken());
            }

            @Override
            public void onError(Exception exc) {
                Log.d(TAG, "No existing Token");
                aquireSharePointToken(rootActivity,applicationContext);
            }
        });

    } catch (Exception e) {
        e.printStackTrace();
        Log.d(TAG, "Auth Error");
    }
}

在我的MainActivity类中,我只是调用aquireSharePointTokenSilently方法,它按预期进行预编码,因为它是第一次登录,它打印出&#34; No existing token&#34;在Log中并调用aquireSharePointToken方法。从那里开始,回调从不参与。例如,如果用户点击&#34;返回&#34;按钮当它们位于通过aquireSharePointToken方法启动的ADAL登录屏幕上时,它应该记录&#34;取消&#34;。

TLDR:aquireSharePointTokenSilently方法有效,aquireSharePointToken不起作用。如果我不使用AuthenticationManager类并且只是在MainActivity中执行这些方法,那么它们都可以完美地工作。

我有一种感觉,我错过了一些非常基本的东西......

提前致谢。

1 个答案:

答案 0 :(得分:1)

您是否已在活动的onActivityResult方法中添加以下行。这是必需的。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    <your Azure AuthenticationContext>.onActivityResult(requestCode, resultCode, data);
}