Java 如何发布到facebook android sdk:4.0.0

Java 如何发布到facebook android sdk:4.0.0,java,android,facebook,Java,Android,Facebook,请帮忙 我有挂在墙上的按钮的代码: btnPostToWall.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { postToWall(); } }); public void postToWall() { // post on user's wall. facebook.dialog(this, "feed",

请帮忙

我有挂在墙上的按钮的代码:

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

}
但是我有了新的Faceboof android sdk 4.0.0,这段代码已经被弃用了

如何将帖子贴到新图书馆的墙上


我读过,但我不知道如何使用

也许这不是你想要的解决方案,但我正在使用它

Facebook Android SDK 4有类
ShareApi
,用于共享您的内容。此类具有静态方法
share()

)将使用
message=null
创建
ShareApi
的新实例,并且不会添加您的消息

解决方案:

  • 如果您使用Facebook SDK作为外部库,请打开类
    ShareApi
    ,或者从Github复制此类 如果您使用的是Maven存储库

  • 更改此代码:

    public static void share(
        final ShareContent shareContent,
        final FacebookCallback<Sharer.Result> callback) {
    new ShareApi(shareContent)
            .share(callback);
    }
    
    public ShareApi(final ShareContent shareContent) {
        this.shareContent = shareContent;
        this.graphNode = DEFAULT_GRAPH_NODE;
    }
    
    对于这一点:

    public static void share(final String message,
        final ShareContent shareContent,
        final FacebookCallback<Sharer.Result> callback) {
    new ShareApi(message, shareContent)
            .share(callback);
    }
    
    public ShareApi(String message, final ShareContent shareContent) {
        this.message = message;
        this.shareContent = shareContent;
        this.graphNode = DEFAULT_GRAPH_NODE;
    }
    
  • 使用更改后的
    ShareApi
    类共享您的内容:

    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());
                }
            }
        });
    
    您已经阅读了本手册,可以在帖子中添加不同的
    ShareContent
    。用于更好地理解新SDK


    当然,您应该拥有有效的访问令牌和发布操作权限。

    关于如何从Android SDK 4.0共享的Facebook官方文档位于以下位置:

    该链接提供了如何通过调用Graph API或通过调用本机Facebook应用程序对话框进行共享的示例

    以下是我如何在自己的应用程序中实现共享对话框:

    在活动/片段的xml中,我添加了
    按钮

      <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"
            />
    
    
    
    然后在片段内部:

    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);
              }
         }});
    
    Button shareButton=(Button)view.findViewById(R.id.shareFacebookButton);
    shareDialog=新建shareDialog(此);
    callbackManager=callbackManager.Factory.create();
    shareDialog.registerCallback(callbackManager,新建
    FacebookCallback(){
    @凌驾
    成功时公共无效(sharr.Result结果){}
    @凌驾
    public void onCancel(){}
    @凌驾
    public void onError(FacebookException错误){}
    });
    shareButton.setOnClickListener(新视图.OnClickListener(){
    @凌驾
    公共void onClick(视图){
    if(ShareDialog.canShow(ShareLinkContent.class)){
    ShareLinkContent=新的ShareLinkContent.Builder()
    .setContentTitle(“你好,Facebook”)
    .setContentDescription(“Hello Facebook”示例展示了简单的Facebook集成)
    .setContentUrl(Uri.parse(“http://developers.facebook.com/android"))
    .build();
    显示(链接内容);
    }
    }});
    
    现在,当有人点击这个按钮时,他们会像你预期的那样看到Facebook对话框

    希望这有帮助。

    这是一个基于Max answer的完整示例(2017年2月13日)

    Gradle:compile'com.facebook.android:facebook android sdk:[4,5]

    公共类ShareOnFacebook扩展活动{
    私有静态最终字符串TAG=“ShareOnFacebook”;
    CallbackManager CallbackManager;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    shareOnWall();
    }
    void shareOnWall(){
    ShareDialog ShareDialog=新建ShareDialog(此);
    callbackManager=callbackManager.Factory.create();
    shareDialog.registerCallback(callbackManager,新建
    FacebookCallback(){
    @凌驾
    成功时公开作废(共享结果){
    Log.d(标记“onSuccess:”);
    Toast.makeText(ShareOnFacebook.this,“onSuccess”,Toast.LENGTH_SHORT.show();
    }
    @凌驾
    公开作废{
    Log.d(标签“onCancel:”);
    Toast.makeText(ShareOnFacebook.this,“onCancel”,Toast.LENGTH\u SHORT.show();
    }
    @凌驾
    public void onError(facebook异常错误){
    Log.d(标签“onError:”);
    Toast.makeText(ShareOnFacebook.this,“onError”+error.toString(),Toast.LENGTH\u SHORT.show();
    }
    });
    if(ShareDialog.canShow(ShareLinkContent.class)){
    ShareLinkContent=新的ShareLinkContent.Builder()
    .setContentTitle(“你好,Facebook”)
    .setContentDescription(“Hello Facebook”示例展示了简单的Facebook集成)
    .setContentUrl(Uri.parse(“http://developers.facebook.com/android"))
    .build();
    显示(链接内容);
    }
    }
    @凌驾
    受保护的void onActivityResult(最终int请求代码、最终int结果代码、最终意图数据){
    super.onActivityResult(请求代码、结果代码、数据);
    callbackManager.onActivityResult(请求代码、结果代码、数据);
    }
    }
    
    如果您只想发布文本,您必须使用我/feed并构建自己的方法:,对于其余的共享选项,您指出的文档都有明确的示例。我希望这会有所帮助。如何发布图像以及内容标题和描述?只需使用
    .setImageUrl(imageUrl)
    其中
    imageUrl
    是有效的
    URI
    对象类型。回答很好,它帮助了我,但我想建议一个更改。与其更改ShareApi类,不如调用
    api.share(new FacebookCallback()…)
    使用您刚刚创建的ShareApi引用。在您编写答案时,此非静态共享函数可能尚未公开。截至2017年4月18日,Graph API版本2.9及更高版本不再支持以下参数。对于版本2.8及更低版本,参数将继续工作到2017年7月17日。contentTitle表示链接中内容的标题a imageURL,即将显示在帖子a上的缩略图的URL
    ShareLinkContent content = new ShareLinkContent.Builder()
                    .build();
    
      <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"
            />
    
    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);
              }
         }});
    
    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);
        }
    
    
    }