Search code examples
c#picasagoogle-data

ClientLogin for Picasa Web Albums Data API with a Google App Domain login


I'm using the Picasa Web Albums Data API to access users' photo albums from a WPF application.

I've followed the code located here: http://code.google.com/apis/gdata/clientlogin.html

I have created a Picasa Web Albums account with a Google Apps (hosted) account. Whenever I tried logging in with my WPF application, I get the "BadAuthentication" error code returned.

Hoping someone has an idea what I'm doing wrong. Note, that this works when I login with a normal Google account.

Here is a snippet of my code:


GDataGAuthRequestFactory authFactory = new GDataGAuthRequestFactory("lh2", _appName);
authFactory.AccountType = "HOSTED_OR_GOOGLE";

_picasaService = new PicasaService(authFactory.ApplicationName);
_picasaService.RequestFactory = authFactory;

_picasaService.setUserCredentials(username, password);
return _picasaService.QueryAuthenticationToken();


Solution

  • After playing around a bit, I changed the AccountType = "GOOGLE", and that worked.

    Thinking about it, that makes sense. I created the account using an existing email address. So in this situation, I was logging into the Google account, not the hosted account.

    Originally, I had not specified a RequestFactory, so the code looked like this:

    
    _picasaService = new PicasaService(_appName);
    
    _picasaService.setUserCredentials(username, password);
    return _picasaService.QueryAuthenticationToken();
    

    This would cause a "Invalid User" error. I originally thought that I would need to set the AccountType = "HOSTED_OR_GOOGLE", to get this to work. I had that in my head. So I added the RequestFactory, thinking that would solve my problems.

    Looking at the documentation for GDataGAuthRequestFactory. It states that the AccountType is defaulted to "GOOGLE_OR_HOSTED", so I tried this code:

    GDataGAuthRequestFactory authFactory = new GDataGAuthRequestFactory("lh2", _appName);
    authFactory.AccountType = "GOOGLE_OR_HOSTED";
    
    _picasaService = new PicasaService(authFactory.ApplicationName);
    _picasaService.RequestFactory = authFactory;
    

    And that works. I have to conclude that the documented default value for AccountType of "GOOGLE_OR_HOSTED" is not correct.