2015-05-13 6 views
5

Bitte helfenWie Post facebook android-sdk an der Wand: 4.0.0

I hava Code für Schaltfläche Beitrag zur Wand:

btnPostToWall.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     postToWall(); 
    } 
}); 

public void postToWall() { 
    // post on user's wall. 
    facebook.dialog(this, "feed", new DialogListener() { 

     @Override 
     public void onFacebookError(FacebookError e) { 
     } 

     @Override 
     public void onError(DialogError e) { 
     } 

     @Override 
     public void onComplete(Bundle values) { 
     } 

     @Override 
     public void onCancel() { 
     } 
    }); 

} 

aber ich habe New Faceboof android sdk 4.0.0 und diesen Code depreacated

Wie post zu wand mit neuer Bibliothek?

Ich las this, aber ich verstehe nicht, wie

+1

Wenn Sie wollen einfach nur Text schreiben, haben Sie mir verwenden/Feed und bauen Sie Ihre eigene Methode: https://developers.facebook.com/docs/android/graph, für den Rest der Freigabe Optionen, die Dokumente, die Sie hingewiesen haben klare Beispiele. Ich hoffe, es hilft. –

Antwort

5

verwenden Vielleicht ist es nicht ganz die Lösung, die Sie suchen, aber ich verwende es.

Facebook Android SDK 4 hat die Klasse ShareApi für die Freigabe Ihrer Inhalte. Diese Klasse hat statische Methode share():

public static void share(
      final ShareContent shareContent, 
      final FacebookCallback<Sharer.Result> callback) { 
     new ShareApi(shareContent) 
       .share(callback); 
    } 

und nicht statisch private String message. Also, wenn Sie versuchen, etwas zu teilen (zB.

ShareApi api = new ShareApi(content); 
api.setMessage("My message"); 
api.share(content, new FacebookCallback<Sharer.Result>() ...) 

) wird neue Instanz von ShareApi mit message = null und Ihrer Nachricht hinzugefügt wird nicht erstellt werden.

Die Lösung:

  1. Offene Klasse ShareApi wenn Sie mit Facebook SDK als externe Bibliothek oder kopieren Sie diese Klasse von Github https://github.com/facebook/facebook-android-sdk/blob/master/facebook/src/com/facebook/share/ShareApi.java wenn Sie Maven-Repository verwenden.

  2. Ändern Sie diesen Code:

    public static void share(
        final ShareContent shareContent, 
        final FacebookCallback<Sharer.Result> callback) { 
    new ShareApi(shareContent) 
         .share(callback); 
    } 
    

    auf diese:

    public static void share(final String message, 
        final ShareContent shareContent, 
        final FacebookCallback<Sharer.Result> callback) { 
    new ShareApi(message, shareContent) 
         .share(callback); 
    } 
    
  3. Ändern Sie diesen Code:

    auf diese:

    public ShareApi(String message, final ShareContent shareContent) { 
        this.message = message; 
        this.shareContent = shareContent; 
        this.graphNode = DEFAULT_GRAPH_NODE; 
    } 
    
  4. Ihre geändert ShareApi Klasse Verwenden Sie für die gemeinsame Nutzung Ihrer Inhalte:

    ShareLinkContent content = new ShareLinkContent.Builder() 
           .build(); 
    

    Sie‘:

    ShareApi.share("My message", content, new FacebookCallback<Sharer.Result>() { 
    
         @Override 
         public void onSuccess(Sharer.Result result) { 
          if (AppConfig.DEBUG) { 
           Log.d(TAG, "SUCCESS"); 
          } 
         } 
    
         @Override 
         public void onCancel() { 
          if (AppConfig.DEBUG) { 
           Log.d(TAG, "CANCELLED"); 
          } 
         } 
    
         @Override 
         public void onError(FacebookException error) { 
          if (AppConfig.DEBUG) { 
           Log.d(TAG, error.toString()); 
          } 
         } 
        }); 
    

Wenn Sie nur Text teilen möchten, können Sie folgenden Code für content Objekt verwenden können Lesen Sie dieses Handbuch bereits https://developers.facebook.com/docs/sharing/android und fügen Sie Ihrem Beitrag verschiedene ShareContent hinzu. Verwenden Sie zum besseren Verständnis neuer SDK.

P.S. Natürlich sollten Sie ein gültiges Zugriffs-Token und eine Berechtigung haben.

+1

Große Antwort, es hat mir geholfen, aber ich würde gerne eine Änderung vorschlagen. Anstatt die ShareApi-Klasse zu ändern, rufen Sie einfach 'api.share (neues FacebookCallback () ...)' mit der ShareApi-Referenz auf, die Sie gerade erstellt haben. Diese nicht statische Share-Funktion war möglicherweise nicht öffentlich, als Sie die Antwort geschrieben haben. – NineToeNerd

6

Die offizielle Facebook-Dokumentation, wie aus dem Android SDK 4.0 zu teilen ist hier zu finden:

https://developers.facebook.com/docs/sharing/android

Diese Verbindung hat Beispiele dafür, wie durch den Aufruf der Graph API oder die gemeinsame Nutzung zu teilen, indem die native Facebook-App aufrufen Dialog.

Hier ist, wie ich den Anteil Dialog in meinem eigenen App implementiert:

im xml für die Aktivität/Fragment ich hinzugefügt, um die Button

<Button 
     android:layout_width="144dp" 
     android:layout_height="144dp" 
     android:id="@+id/shareFacebookButton" 
     android:text="" 
     android:background="@drawable/facebook_button" 
     android:layout_gravity="center" 
     android:layout_marginBottom="6dp" 
     /> 

dann im Inneren des Fragment:

Button shareButton = (Button)view.findViewById(R.id.shareFacebookButton); 
shareDialog = new ShareDialog(this); 
callbackManager = CallbackManager.Factory.create(); 
shareDialog.registerCallback(callbackManager, new 

FacebookCallback<Sharer.Result>() { 
    @Override 
    public void onSuccess(Sharer.Result result) {} 

    @Override 
    public void onCancel() {} 

    @Override 
    public void onError(FacebookException error) {} 
}); 

shareButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     if (ShareDialog.canShow(ShareLinkContent.class)) { 
      ShareLinkContent linkContent = new ShareLinkContent.Builder() 
       .setContentTitle("Hello Facebook") 
       .setContentDescription("The 'Hello Facebook' sample showcases simple Facebook integration") 

      .setContentUrl(Uri.parse("http://developers.facebook.com/android")) 
          .build(); 

     shareDialog.show(linkContent); 
      } 
    }}); 

Wenn nun jemand auf den Button klickt, wird er mit dem Facebook-Dialog konfrontiert, wie Sie es erwarten würden.

Hoffe, das hilft.

+0

Wie man ein Bild zusammen mit Inhalt Titel und Beschreibung einträgt? –

+0

Verwenden Sie einfach '.setImageUrl (imageUrl)' wobei 'imageUrl' ein gültiger 'URI'-Objekttyp ist. –

1

Dies ist voll funktionsfähig (13.02.2017) Beispiel basierend auf Max Antwort.

Gradle: kompilieren 'com.facebook.android:facebook-android-sdk:[4,5)'

public class ShareOnFacebook extends Activity { 

    private static final String TAG = "ShareOnFacebook"; 

    CallbackManager callbackManager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     shareOnWall(); 
    } 

    void shareOnWall() { 
     ShareDialog shareDialog = new ShareDialog(this); 
     callbackManager = CallbackManager.Factory.create(); 
     shareDialog.registerCallback(callbackManager, new 

       FacebookCallback<Sharer.Result>() { 
        @Override 
        public void onSuccess(Sharer.Result result) { 
         Log.d(TAG, "onSuccess: "); 
         Toast.makeText(ShareOnFacebook.this, "onSuccess", Toast.LENGTH_SHORT).show(); 
        } 

        @Override 
        public void onCancel() { 
         Log.d(TAG, "onCancel: "); 
         Toast.makeText(ShareOnFacebook.this, "onCancel", Toast.LENGTH_SHORT).show(); 
        } 

        @Override 
        public void onError(FacebookException error) { 
         Log.d(TAG, "onError: "); 
         Toast.makeText(ShareOnFacebook.this, "onError" + error.toString(), Toast.LENGTH_SHORT).show(); 
        } 
       }); 

     if (ShareDialog.canShow(ShareLinkContent.class)) { 
      ShareLinkContent linkContent = new ShareLinkContent.Builder() 
        .setContentTitle("Hello Facebook") 
        .setContentDescription("The 'Hello Facebook' sample showcases simple Facebook integration") 
        .setContentUrl(Uri.parse("http://developers.facebook.com/android")) 
        .build(); 

      shareDialog.show(linkContent); 
     } 
    } 

    @Override 
    protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     callbackManager.onActivityResult(requestCode, resultCode, data); 
    } 


} 
+0

https://developers.facebook.com/docs/sharing/android, Ab dem 18. April 2017 werden die folgenden Parameter von Graph API Version 2.9 und höher nicht mehr unterstützt. Für Versionen 2.8 und niedriger funktionieren die Parameter bis zum 17. Juli 2017. ein contentTitle, das den Titel des Inhalts im Link ein imageURL darstellt, die URL des Thumbnails, die auf dem Post einer Inhaltsbeschreibung von angezeigt wird der Inhalt, normalerweise 2-4 Sätze. Kurz gesagt, alle müssen die Facebook-Dokumentation immer überprüfen –

Verwandte Themen