2013-12-09 7 views
9

Ich versuche, Mediendatei auf Google + hochzuladen, und ich habe Client-ID bei Google-Konsole erstellt. habe ich Upload-Methode Form
attaching-media"code": 403, und "Grund": "verbotene" Ausnahme beim Hochladen von Datei in Google plus

authentication

erhalten, wenn Sie die Anwendung ausführen ich erhalte Ausnahme in Zeile

Media result = null; 
        try { 
         result = insertRequest.execute(); 
        } catch (IOException e1) { 
         // TODO Auto-generated catch block 
         // e1.printStackTrace(); 
         Log.e("result exception", "" + e1); 
        } 

Ausnahme sind:

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): } 

und mein Code Schlag:

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); 
       } 
      } 
     } 
    }); 

} 

}

+0

bin nicht vertraut mit .. ist das cis? –

+0

nein das ist Java – Cropper

Antwort

5

Ich denke, dieser Code ist für Server-Seite hochladen und Und ich versuche, Datei über Android-Handy hochladen, so dass es Ausnahme zeigt. Durch diese Question1 und Question2 stellte ich fest, dass Google+ keine unabhängige Schreib-API für allgemeine Entwickler zur Verfügung hat - die einzige Möglichkeit, über eine App auf Google+ zu posten.

Note: Aber wenn jemand weiß über Google+ schreiben API für allgemeine Entwickler dann bitte helfen Sie mir.

5

die Google+ Domains API verwenden, müssen Sie sicherstellen, dass die Domain für den Benutzer, den Sie im Namen handeln von wurde mit den richtigen Berechtigungen für Ihre App einrichten. Diese Anweisungen befinden sich unter dem Abschnitt "Delegieren der domänenweiten Autorität für Ihr Dienstkonto" in Schritt 1 von quick-start guide.

Insbesondere müssen Sie die Client-ID Ihrer App den Bereichen zuordnen, die von Ihrer App im Steuerungsfeld für die Domäne verwendet werden. Der Domain-Administrator ist die einzige Person, die dies tun kann. Wenn Sie also mit einer anderen Domain arbeiten, sollten Sie sich mit dieser Person in Verbindung setzen. Außerdem müssen die Bereiche, die in der Systemsteuerung aufgeführt sind, GENAU mit den Bereichen übereinstimmen, die Sie in Ihrer App anfordern.

+0

Jetzt können wir Mediendatei von meiner App zu Google Plus teilen, wenn mein Telefon googleplus App haben. Ich möchte wissen, dass es eine API gibt, um Mediendatei in Google + für Android wie Picasa-Freigabe zu teilen. – Cropper

+0

Ist das nicht für die Autorisierung von (Backend-) Dienstkonten und nicht für mobile Clients gedacht? In der Systemsteuerung wird Folgendes angezeigt: "Sie können diese registrierten Kunden autorisieren, auf Ihre Benutzerdaten zuzugreifen **, ohne dass Ihre Benutzer ihre Zustimmung oder ihre Passwörter einzeln erteilen müssen." –