收到令牌后,Dropbox API如何发出警报?

时间:2017-12-06 15:01:56

标签: android dropbox access-token dropbox-api

我可以使用v2 Dropbox API登录并从我的Android应用程序导出/导入。唯一的问题是首次运行时请求令牌并启动Dropbox应用程序/网站 - 我必须至少运行两次Auth.startOAuth2Authentication并暂停,以便能够使用Auth.getOAuth2Token读取令牌。

是否有wait()并在获取令牌后startOAuth2Authentication返回时收到通知?

   Auth.startOAuth2Authentication(this, getString(R.string.app_key));
   //wait for response, retry, or time out and finish
   String accessToken = Auth.getOAuth2Token();
   prefs.edit().putString(ACCESS_TOKEN, accessToken).commit();

2 个答案:

答案 0 :(得分:1)

您不应该拨打getOAuth2Token两次,并且在致电startOAuth2Authentication后不应立即致电startOAuth2Authentication

您应该通过调用getOAuth2Token来启动流程,如下例所示:

https://github.com/dropbox/dropbox-sdk-java/blob/master/examples/android/src/main/java/com/dropbox/core/examples/android/UserActivity.java#L36

然后您应该稍后在onResume中调用 <xsl:function name="functx:camel-case-to-words" as="xs:string" xmlns:functx="http://www.functx.com"> <xsl:param name="arg" as="xs:string?"/> <xsl:param name="delim" as="xs:string"/> <xsl:sequence select=" concat(substring($arg,1,1), replace(substring($arg,2),'(\p{Lu})', concat($delim, '$1'))) "/> </xsl:function> 来完成该流程,如下例所示:

https://github.com/dropbox/dropbox-sdk-java/blob/master/examples/android/src/main/java/com/dropbox/core/examples/android/DropboxActivity.java#L22

答案 1 :(得分:0)

以下是实施Dropbox Android API的简单示例: https://www.sitepoint.com/adding-the-dropbox-api-to-an-android-app/

现在,为了解决您的问题,在调用Auth.startOAuth2Authentication(this, getString(R.string.app_key));后,您将无法立即获得警告。调用此方法后,将显示Dropbox登录活动,并且只有在用户登录后才能获取令牌(这绝不是直接的,您无法知道需要多长时间)。 用户成功登录后,您的活动将恢复,您可以在教程的示例中看到活动的onResume方法被覆盖,在那里执行检查。

我将在本教程的LoginActivity下面复制。从这里开始应该很容易:

public class LoginActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        Button SignInButton = (Button) findViewById(R.id.sign_in_button);
        SignInButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                Auth.startOAuth2Authentication(getApplicationContext(), getString(R.string.APP_KEY));
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        getAccessToken();
    }

    public void getAccessToken() {
        String accessToken = Auth.getOAuth2Token(); //generate Access Token
        if (accessToken != null) {
            //Store accessToken in SharedPreferences
            SharedPreferences prefs = getSharedPreferences("com.example.valdio.dropboxintegration", Context.MODE_PRIVATE);
            prefs.edit().putString("access-token", accessToken).apply();

            //Proceed to MainActivity
            Intent intent = new Intent(LoginActivity.this, MainActivity.class);
            startActivity(intent);
        }
    }
}