Reputation: 1177
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
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);
}
}
}
});
}
}
Upvotes: 10
Views: 10621
Reputation: 1177
I think This code is for server side uploading and And I'm trying to upload file through Android phone so that it's showing Exception. By these Question1 and Question2 I found that Google+ does not have an independent write API available to general developers - the only way to post to Google+ via an app.
Note
: But if any one know about Google+ write API for general developers then Please help me.
Upvotes: 5
Reputation: 2176
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.
Upvotes: 5