【问题标题】:Post photo facebook android发布照片 facebook android
【发布时间】:2016-06-21 11:08:10
【问题描述】:

我会在我的应用程序中创建一个带有照片和标题的帖子,然后将其发布到我的 Facebook 上。 我不确切知道所需的步骤,所以我不知道我做错了什么。 主要活动在其 xml 中有一个 LoginButton 和一个 ShareButton。 我做到了:

public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
public DBhelper database;
public CallbackManager callbackManager;
public ShareDialog shareDialog;
public ShareButton shareButton;
public SharePhotoContent sharePhotoContent;

}

这个类有:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getApplicationContext());
    AppEventsLogger.activateApp(this);
    callbackManager = CallbackManager.Factory.create();
    shareDialog = new ShareDialog(this);
    shareButton=new ShareButton(this);

    setContentView(R.layout.activity_main);

    LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
    loginButton.setReadPermissions("user_friends","public_profile");
    get_login_details(loginButton);

    shareButton=(ShareButton) findViewById(R.id.share_button);
    sharePhotoContent=genera_share_photo_content();
    shareButton.setShareContent(sharePhotoContent);

}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode,resultCode,data);
    Log.e(TAG,data.toString());

}

还有这两种方法:

protected void get_login_details(LoginButton loginButton) {
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            // App code
            Toast.makeText(getApplicationContext(),"SI",Toast.LENGTH_LONG).show();
        }

        @Override
        public void onCancel() {
            // App code
            Toast.makeText(getApplicationContext(),"CANCEL",Toast.LENGTH_LONG).show();
        }

        @Override
        public void onError(FacebookException exception) {
            // App code
            Toast.makeText(getApplicationContext(),"NO",Toast.LENGTH_LONG).show();
        }
    });

}

public SharePhotoContent genera_share_photo_content() {
    //code...
    Bitmap image = ...

    SharePhoto photo = new SharePhoto.Builder()
            .setBitmap(image)
            .build();
    SharePhotoContent content = new SharePhotoContent.Builder()
            .addPhoto(photo)
            .build();
    return content;

}

现在,共享内容是在开头制作的:我会使用genera_share_photo_content() 使其动态化: 我要如何修改它? 我应该打电话给shareDialog.show(content) 还是ShareApi.share(content,null)? 是我为登录按钮设置的权限user_friendspublic_profile。足以使所有工作?

【问题讨论】:

    标签: android facebook share photo


    【解决方案1】:

    您必须添加以下权限:

    "publish_actions"
    

    在你的清单中你必须包含这些标签

    <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id" />
        <provider
            android:name="com.facebook.FacebookContentProvider"
            android:authorities="com.facebook.app.FacebookContentProvider1618161851808217"
            android:exported="true" />
        <activity
            android:name="com.facebook.FacebookActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
    

    这样做:

    private void sharePhotoToFacebook(){
    
        String filePath = "path to your image";
        String text = "your custom text";
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inPreferredConfig = Bitmap.Config.ARGB_8888;
        Bitmap bitmap = BitmapFactory.decodeFile(filePath, options);
            SharePhoto photo = new SharePhoto.Builder()
                    .setBitmap(bitmap)
                    .setCaption(text)
                    .build();
    
            SharePhotoContent content = new SharePhotoContent.Builder()
                    .addPhoto(photo)
                    .setContentUrl(Uri.parse(text))
                    .build();
        ShareApi.share(content,null);
        Toast.makeText(getApplicationContext(),"Snapshot shared On Facebook",Toast.LENGTH_SHORT).show();
    
    }
    
    public void publishimage() {
        Log.i("Android","publishing Image");
        FacebookSdk.sdkInitialize(getApplicationContext());
    
        callbackManager = CallbackManager.Factory.create();
    
        shareDialog = new ShareDialog(this);
        java.util.List<String> permissionNeeds = Arrays.asList("publish_actions");
    
        //this loginManager helps you eliminate adding a LoginButton to your UI
        manager = LoginManager.getInstance();
    
        manager.logInWithPublishPermissions(this, permissionNeeds);
    
        manager.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                sharePhotoToFacebook();
            }
    
            @Override
            public void onCancel() {
                System.out.println("onCancel");
            }
    
            @Override
            public void onError(FacebookException exception) {
                System.out.println("onError");
            }
        });
    
    }
    

    点击按钮:

    btnshare.setOnclicklistener(new View.OnclickListener){
        @Override
        public void onClick(View V){
            publishimage();
        }
    }
    

    【讨论】:

    • 如何添加该权限?使用 LoginButton.setReadPermission() 或 LoginButonn.setPublishPermissions()?
    • 将代码中的这一行:loginButton.setReadPermissions("user_friends","public_profile"); 替换为 loginButton.setReadPermissions("publish_actions");
    • 阅读这篇博文,会帮助你理解:simpledeveloper.com/…
    • 错误:无法将发布或管理权限 (publish_actions) 传递给读取授权请求
    • 如果我写 loginButton.setReadPermissions("publish_actions");我有那个错误。如果我写 loginButton.setPublishPermissions("publish_actions"); ,当我登录时,facebook 告诉我某些权限尚未得到保证。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    相关资源
    最近更新 更多