簡體   English   中英

在Android上使用OAuth和Scribe一起使用

[英]Using OAuth with Scribe on Android

嗨我正在使用抄寫庫與LInkedIn進行OAuth通信。

我有一個登錄類和一個查詢類。

登錄類創建一個服務來獲取我的請求令牌和機密,並創建我的訪問令牌。 然后將訪問令牌保存到首選項文件中。 這似乎工作正常,我可以在創建所有令牌后成功進行api調用。

在我的OAuth查詢類中,我檢索訪問令牌,創建另一個服務並嘗試進行API調用,但是當我加載一個調用此類的活動時,它會導致我的應用程序崩潰。 我已經過測試,以確保訪問令牌已保存,並且它們是。

這是我的登錄類

public class Login_LinkedIn extends Activity 
{
SharedPreferences settings;
OAuthService service;
Token requestToken;

Button home;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.webauth);

    initControls();

    service = new ServiceBuilder()
    .provider(LinkedInApi.class)
    .apiKey( getString(R.string.apiKey) )
    .apiSecret( getString(R.string.secKey) )
    .callback( getString(R.string.callBack) )
    .build();

    requestToken = service.getRequestToken();
    final String authURL = service.getAuthorizationUrl(requestToken);

    final WebView webview = (WebView) findViewById(R.id.webView);

    //attach WebViewClient to intercept the callback url
    webview.setWebViewClient(new WebViewClient()
    {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url)
        {

            //check for our custom callback protocol
            //otherwise use default behavior
            if(url.startsWith( getString(R.string.callBack) ))
            {
                //authorization complete hide webview for now.
                webview.setVisibility(View.GONE);
                Uri uri = Uri.parse(url);
                String verifier = uri.getQueryParameter("oauth_verifier");
                Verifier v = new Verifier(verifier);

                //save this token for practical use.
                Token accessToken = service.getAccessToken(requestToken, v);

                OAuthRequest request = new OAuthRequest(Verb.GET, "http://api.linkedin.com/v1/people/~:(first-name,last-name)");
                service.signRequest(accessToken, request);
                Response response = request.send();

                xmlHandler xh = new xmlHandler(response.getBody());

                settings = getSharedPreferences("preferences", 0);
                SharedPreferences.Editor editor = settings.edit();

                editor.putString("accessToken", accessToken.getToken());

                // The requestToken is saved for use later on to verify the OAuth request.
                // See onResume() below
                editor.putString("requestToken", requestToken.getToken());
                editor.putString("requestSecret", requestToken.getSecret());

                editor.putString("first-name", xh.getValue("first-name"));
                editor.putString("last-name", xh.getValue("last-name"));

                editor.commit();

                return true;
            }
            return super.shouldOverrideUrlLoading(view, url);
        }
   });

   //send user to authorization page
   webview.loadUrl(authURL); 
}

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

    Intent i = getIntent();

    if(i != null) 
    {
        Uri uri = i.getData();
        if(uri != null)
        {
            String oauthVerifier = uri.getQueryParameter("oauth_verifier");

            Verifier verifier = new Verifier(oauthVerifier);

            requestToken = new Token(settings.getString("requestToken", null), settings.getString("requestSecret", null));

            Token accessToken = service.getAccessToken(requestToken, verifier);

            // Save the access token.
            SharedPreferences.Editor editor = settings.edit();
            editor.remove("requestToken");
            editor.remove("requestSecret");
            editor.putString("accessToken", accessToken.getToken());
            editor.putString("accessSecret", accessToken.getSecret());
            editor.commit();

            // Start the film list activity.
            final Intent intent = new Intent(this,ProConnect.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent);
        }
    }
} 

private void initControls()
{
    home = (Button)findViewById(R.id.home);

    final Intent intent = new Intent(this,ProConnect.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    home.setOnClickListener(new Button.OnClickListener() 
    {
        public void onClick (View v) 
        {
            startActivity(intent);
        }
    });


}

}

和我的查詢類

public class oAuthQuery extends Activity
{
OAuthService service;
Token accessToken;
SharedPreferences settings;

public oAuthQuery()
{
    service= new ServiceBuilder()
    .provider(LinkedInApi.class)
    .apiKey( getString(R.string.apiKey) )
    .apiSecret( getString(R.string.secKey) )
    .callback( getString(R.string.callBack) )
    .build();

    settings = getSharedPreferences("preferences", 0);

    accessToken = new Token(settings.getString("accessToken", null), settings.getString("accessSecret", null));

}

public String query(String s)
{
    OAuthRequest request = new OAuthRequest(Verb.GET, s);
    service.signRequest(accessToken, request);
    Response response = request.send();

    return response.getBody();
}

public OAuthService getService()
{
    return service;
}

}

謝謝Jeff的任何幫助

我解決了這個問題,最終它是愚蠢的。 我編輯了我的代碼以保存訪問密鑰和訪問令牌但在我的手機上測試我的應用時忘記重新登錄。 這導致保存部分令牌的代碼未到達。

我仍然在使用LinkedIn API中的邀請調用時遇到問題

invite.setOnClickListener(new Button.OnClickListener() 
        {
            public void onClick (View v) 
            {
                inviteXml = inviteCreator.inviteString(to, subj, body, authName, authValue);
                nameField.setText(inviteXml);
                titleField.setText("");


                call = "http://api.linkedin.com/v1/people/~/mailbox";
                request = new OAuthRequest(Verb.GET, call);
                request.addPayload(inviteXml);
                service.signRequest(accessToken, request);
                response = request.send();

                invite.setVisibility(View.GONE);
            }
        });

我不確定這是否是將XML字符串添加到調用的正確方法。 LinkedIn API沒有指定如何添加它。 有沒有人有這方面的經驗?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM