I trying to upload media file on google+ and i have created Client id at google console.
I have get uploading method form
attaching-media
authentication
when running the application I am getting exception at line
Media result = null;
try {
result = insertRequest.execute();
} catch (IOException e1) {
// TODO Auto-generated catch block
// e1.printStackTrace();
Log.e("result exception", "" + e1);
}
exception are :
12-09 18:49:20.983: E/result exception(26301):com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
12-09 18:49:20.983: E/result exception(26301): {
12-09 18:49:20.983: E/result exception(26301): "code" : 403,
12-09 18:49:20.983: E/result exception(26301): "errors" : [ {
12-09 18:49:20.983: E/result exception(26301): "domain" : "global",
12-09 18:49:20.983: E/result exception(26301): "message" : "Forbidden",
12-09 18:49:20.983: E/result exception(26301): "reason" : "forbidden"
12-09 18:49:20.983: E/result exception(26301): } ],
12-09 18:49:20.983: E/result exception(26301): "message" : "Forbidden"
12-09 18:49:20.983: E/result exception(26301): }
and my code is blow:
public class MainActivity extends Activity {
public static final String CLIENT_ID = "***********************************";
public static final String CLIENT_SECRET = "******************************";
String REDIRECT_URI = "http://localhost";
// String REDIRECT_URI = "urn:ietf:wg:oauth:2.0:oob";
JsonFactory jsonFactory = new JacksonFactory();
String posturl ="https://www.googleapis.com/upload/plusDomains/v1/people/userId/media/collection";
HttpTransport transport = new NetHttpTransport();
GoogleTokenResponse tokenResponse;
@SuppressLint({ "NewApi", "SetJavaScriptEnabled" })
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
WebView webview = new WebView(this);
webview.setVisibility(View.VISIBLE);
webview.getSettings().setJavaScriptEnabled(true);
setContentView(webview);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
Collection<String> SCOPE = Arrays.asList(
"https://www.googleapis.com/auth/plus.me",
"https://www.googleapis.com/auth/plus.media.upload",
"https://www.googleapis.com/auth/plus.stream.write");
// "https://www.googleapis.com/auth/plus.profiles.read");
final GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
transport, jsonFactory, CLIENT_ID,
CLIENT_SECRET, SCOPE).setApprovalPrompt("force")
.setAccessType("offline").build();
String url = flow.newAuthorizationUrl().setRedirectUri(REDIRECT_URI)
.build();
System.out.println("url: " + url);
webview.loadUrl(url);
webview.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
if (url.startsWith(REDIRECT_URI)) {
if (url.indexOf("code=") != -1) {
// Url is like http://localhost/?code=4/Z5DgC1IxNL-muPsrE2Sjy9zQn2pF
String code = url.substring(REDIRECT_URI.length() + 7,
url.length());
System.out.println("code: " + code);
tokenResponse = null;
try {
tokenResponse = flow.newTokenRequest(code)
.setRedirectUri(REDIRECT_URI).execute();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(transport)
.setJsonFactory(jsonFactory)
.setClientSecrets(CLIENT_ID, CLIENT_SECRET)
.addRefreshListener(
new CredentialRefreshListener() {
@Override
public void onTokenResponse(
Credential credential,
TokenResponse tokenResponse) {
System.out
.println("Credential was refreshed successfully.");
}
@Override
public void onTokenErrorResponse(
Credential credential,
TokenErrorResponse tokenErrorResponse) {
System.err
.println("Credential was not refreshed successfully. "
+ "Redirect to error page or login screen.");
}
}).build();
credential.setFromTokenResponse(tokenResponse);
PlusDomains plusDomains = new PlusDomains.Builder(
transport, jsonFactory, credential).setApplicationName("RiskScore").build();
String userId = "me"; // Requires the plus.me scope
File jpegFile = null;
jpegFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/RiskScore/20131205115454.jpg");
Media mediaDescription = new Media();
mediaDescription.setDisplayName("A picture of Score");
Insert insertRequest = null;
try {
insertRequest = plusDomains.media().insert(userId,
"cloud", mediaDescription,
new FileContent("image/jpeg", jpegFile));
} catch (IOException e1) {
// TODO Auto-generated catch block
// e1.printStackTrace();
Log.e("insertRequest exception", "" + e1);
}
Media result = null;
try {
result = insertRequest.execute();
} catch (IOException e1) {
// TODO Auto-generated catch block
// e1.printStackTrace();
Log.e("result exception", "" + e1);
}
if (result != null) {
String mediaId = result.getId();
// Now create a post using the uploaded image
// Create the activity and populate the contents
com.google.api.services.plusDomains.model.Activity activity = new com.google.api.services.plusDomains.model.Activity();
activity.setObject(new PlusDomainsObject());
activity.getObject().setContent("Risk Project....");
// Attach the photo
PlusDomainsObject.Attachments attachment = new PlusDomainsObject.Attachments();
attachment.setObjectType("photo");
attachment.setId(mediaId);
ArrayList<Attachments> attachments = new ArrayList<PlusDomainsObject.Attachments>();
attachments.add(attachment);
// You can also add multiple attachments to the post
activity.getObject().setAttachments(attachments);
// Set the activity to be visible only to your domain
PlusDomainsAclentryResource acl = new PlusDomainsAclentryResource();
acl.setType("domain");
Acl aclEntries = new Acl();
aclEntries
.setItems(new ArrayList<PlusDomainsAclentryResource>());
aclEntries.getItems().add(acl);
aclEntries.setDomainRestricted(true);
// Required, this does the domain restriction
activity.setAccess(aclEntries);
// Post the activity
com.google.api.services.plusDomains.model.Activity newActivity = null;
try {
newActivity = plusDomains.activities()
.insert(userId, activity).execute();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("New activity created with ID "
+ newActivity.getId());
System.out.println("URL: " + newActivity.getUrl());
view.setVisibility(View.INVISIBLE);
}
} else if (url.indexOf("error=") != -1) {
view.setVisibility(View.INVISIBLE);
}
}
}
});
}
}
" {"code":403,"reason":"Forbidden","description":"The server understood the request but refuses to authorize it.","message":"User not authorized to access service" 1) For Solution, enter CR with a Workaround if a direct Solution is not available.
Error Response Format Cloud Storage uses the standard HTTP error reporting format for the JSON API. Successful requests return HTTP status codes in the 2xx range. Failed requests return status codes in the 4xx and 5xx ranges.
The Authorization header was of an unrecognized format or uses an unsupported credential type. When downloading content from a cookie-authenticated site, e.g., using the Storage Browser, the response will redirect to a temporary domain. This error will occur if access to said domain occurs after the domain expires.
To use the Google+ Domains API, you need to make sure that the Domain for the user you are acting on behalf of has been set up with the right permissions for your app. These instructions are under the "Delegate domain-wide authority to your service account" section of Step 1 of the quick-start guide.
Specifically, you need to associate your app's Client ID with the scopes your app will use in the control panel for the domain. The domain administrator is the only person who can do this--so if you are working with another domain, be sure you get in contact with that person. Also, the scopes listed in the control panel must match EXACTLY with the scopes you request in your app.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With