Yin Niu, Thank you for your reply.
I reviewed the link you suggested but I see I am doing the same basic steps:
1. Create my AdWords user object.
2. Call BatchJobService.mutate() // this works and it returns an uploadURL.
3. Create BatchJobUtilities object with the same AdWords user.
4. Call BatchJobUtilities.upload(uploadURL, myOperations) // This line fails and returns: SignatureDoesNotMatch
So, based on your response, which parameters am I supposed to provide and how?
I don't create any signature myself, I think the AdWords library does it.
Just in case it helps in any way, this is how I create my AdWords user:
AdWordsUser adWordsUser = new AdWordsUser();
AdWordsAppConfig config = (AdWordsAppConfig)adWordsUser.Config;
config.OAuth2Mode = Google.Api.Ads.Common.Lib.OAuth2Flow.APPLICATION;
config.DeveloperToken = myDeveloperToken;
config.OAuth2ClientId = myClientId;
config.OAuth2ClientSecret = myClientSecret;
config.OAuth2AccessToken = myAccessToken;
config.OAuth2RefreshToken = myRefreshToken;
config.ClientCustomerId = oneOfMyClientsCustomerId;
adWordsUser.OAuthProvider.RefreshAccessToken();
As I mentioned before, sending items to AdWords API one by one works.
I am not sure what else special I need to do to upload items in batch.
And, could you please mention what parameters are included in the "Signature"?
Thanks.