首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Android中向Facebook上传视频时被拒绝的许可

在Android中向Facebook上传视频时被拒绝的许可
EN

Stack Overflow用户
提问于 2015-10-10 07:14:30
回答 2查看 731关注 0票数 1

我正在编写一个android应用程序来上传和分享facebook上的视频。我的代码如下:

代码语言:javascript
运行
复制
 public void doShareVideo(View view) {
        List<String> permissionNeeds = Arrays.asList("publish_actions","publish_pages");
        //this loginManager helps you eliminate adding a LoginButton to your UI
        LoginManager manager = LoginManager.getInstance();

        manager.logInWithPublishPermissions(this, permissionNeeds);

        Uri videoFileUri = Uri.parse("file:///storage/emulated/0/Movies/Untitled.mp4");
        ShareVideo video = new ShareVideo.Builder()
                .setLocalUrl(videoFileUri)
                .build();
        ShareVideoContent content = new ShareVideoContent.Builder()
                .setVideo(video)
                .setContentTitle("Video shared from my android apps")
                .build();

        ShareApi.share(content, new FacebookCallback<Sharer.Result>() {
            @Override
            public void onSuccess(Sharer.Result result) {

            }

            @Override
            public void onCancel() {

            }

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

但是我在运行时会收到错误消息:

代码语言:javascript
运行
复制
10-10 02:57:40.714 19490-19490/? W/System.err: Error preparing share content: Permission denied
10-10 02:57:40.714 19490-19490/? W/System.err:     at com.facebook.share.internal.ShareInternalUtility.invokeOnErrorCallback(ShareInternalUtility.java:529)
10-10 02:57:40.714 19490-19490/? W/System.err:     at com.facebook.share.internal.ShareInternalUtility.invokeCallbackWithError(ShareInternalUtility.java:98)
10-10 02:57:40.714 19490-19490/? W/System.err:     at com.facebook.share.internal.ShareInternalUtility.invokeCallbackWithException(ShareInternalUtility.java:90)
10-10 02:57:40.714 19490-19490/? W/System.err:     at com.facebook.share.ShareApi.shareVideoContent(ShareApi.java:417)
10-10 02:57:40.714 19490-19490/? W/System.err:     at com.facebook.share.ShareApi.share(ShareApi.java:186)
10-10 02:57:40.714 19490-19490/? W/System.err:     at com.facebook.share.ShareApi.share(ShareApi.java:79)
10-10 02:57:40.714 19490-19490/? W/System.err:     at com.anhnn.facebooklogin.ShareLinkActivity.doShareVideo(ShareLinkActivity.java:189)
10-10 02:57:40.714 19490-19490/? W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
10-10 02:57:40.714 19490-19490/? W/System.err:     at java.lang.reflect.Method.invoke(Method.java:372)
10-10 02:57:40.714 19490-19490/? W/System.err:     at android.view.View$1.onClick(View.java:4015)
10-10 02:57:40.714 19490-19490/? W/System.err:     at android.view.View.performClick(View.java:4780)
10-10 02:57:40.714 19490-19490/? W/System.err:     at android.view.View$PerformClick.run(View.java:19866)
10-10 02:57:40.715 19490-19490/? W/System.err:     at android.os.Handler.handleCallback(Handler.java:739)
10-10 02:57:40.715 19490-19490/? W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
10-10 02:57:40.715 19490-19490/? W/System.err:     at android.os.Looper.loop(Looper.java:135)
10-10 02:57:40.715 19490-19490/? W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5254)
10-10 02:57:40.715 19490-19490/? W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
10-10 02:57:40.715 19490-19490/? W/System.err:     at java.lang.reflect.Method.invoke(Method.java:372)
10-10 02:57:40.715 19490-19490/? W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
10-10 02:57:40.715 19490-19490/? W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
10-10 02:57:40.757 19490-19490/? W/art: Attempt to remove local handle scope entry from IRT, ignoring
10-10 02:57:40.758 19490-19490/? W/AwContents: onDetachedFromWindow called when already detached. Ignoring

我使用了Facebook : com.facebook.android:facebook-android-sdk:4.6.0,请帮助我,非常感谢。

对于@Fyodor,我已经更改了代码,作为您的建议,但我什么也没有发生。登录Facebook并成功批准权限后,LogCat中不会显示任何日志信息或错误。我的新代码如下:

代码语言:javascript
运行
复制
public class ShareVideoActivity extends AppCompatActivity {

    private static final String LOG_TAG = "ShareVideo";
    private CallbackManager callbackManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        FacebookSdk.sdkInitialize(this.getApplicationContext());
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_share_video);

        callbackManager = CallbackManager.Factory.create();
        LoginManager loginManager = LoginManager.getInstance();
        loginManager.registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        // it would be nice here to check loginResult.getRecentlyGrantedPermissions() for requested permissions
                        Log.d(LOG_TAG, "Success " + loginResult.getRecentlyGrantedPermissions().toString());
                        Uri videoFileUri = Uri.parse("file:///storage/emulated/0/Movies/Untitled.mp4");
                        ShareVideo video = new ShareVideo.Builder()
                                .setLocalUrl(videoFileUri)
                                .build();
                        ShareVideoContent content = new ShareVideoContent.Builder()
                                .setVideo(video)
                                .setContentTitle("Video shared from my android apps")
                                .build();

                        ShareApi.share(content, new FacebookCallback<Sharer.Result>() {
                            @Override
                            public void onSuccess(Sharer.Result result) {

                            }

                            @Override
                            public void onCancel() {

                            }

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

                    @Override
                    public void onCancel() {
                        // App code
                    }

                    @Override
                    public void onError(FacebookException exception) {
                        // App code
                    }
                });
        List<String> permissionNeeds = Arrays.asList("publish_actions", "publish_pages");
        loginManager.logInWithPublishPermissions(this, permissionNeeds);
    }
}

你有什么新建议给我吗?提前谢谢。(我可以分享图片和链接,但遇到了视频问题)

EN

回答 2

Stack Overflow用户

发布于 2015-10-10 07:56:02

当你还没有被授予权限的时候,你似乎在尝试上传视频。尝试以下几点:

  1. 为LoginManager设置回调。
  2. 使用LoginManager登录。
  3. (最重要的!)等待用户登录。您将通过回调得到通知。
  4. 检查是否授予权限。
  5. 如果是的话,上传。

近似结果如下所示:

代码语言:javascript
运行
复制
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(this.getApplicationContext());

    callbackManager = CallbackManager.Factory.create();

    LoginManager.getInstance().registerCallback(callbackManager,
    new FacebookCallback < LoginResult > () {
        @Override
        public void onSuccess(LoginResult loginResult) {
            // it would be nice here to check loginResult.getRecentlyGrantedPermissions() for requested permissions

            Uri videoFileUri = Uri.parse("file:///storage/emulated/0/Movies/Untitled.mp4");
            ShareVideo video = new ShareVideo.Builder()
                .setLocalUrl(videoFileUri)
                .build();
            ShareVideoContent content = new ShareVideoContent.Builder()
                .setVideo(video)
                .setContentTitle("Video shared from my android apps")
                .build();

            ShareApi.share(content, new FacebookCallback < Sharer.Result > () {
                @Override
                public void onSuccess(Sharer.Result result) {

                }

                @Override
                public void onCancel() {

                }

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

        @Override
        public void onCancel() {
            // App code
        }

        @Override
        public void onError(FacebookException exception) {
            // App code   
        }
    });
    LoginManager.getInstance().logInWithPublishPermissions(this, permissionNeeds);
}

是的,这个代码可以而且应该得到改进,但是整个想法就在这里。

票数 1
EN

Stack Overflow用户

发布于 2015-10-10 09:18:24

原因是将视频上传到facebook需要一个名为"upload_video“的权限,如果这个权限不是由用户授予的,您就不能上传视频。

下面是确保权限的示例代码:

代码语言:javascript
运行
复制
//Path to the video, Ex: path = Environment.getExternalStorageDirectory() + File.separator + "myVideo.mp4";
    String path;
    //get the current active facebook session
    Session session = Session.getActiveSession();
    //If the session is open
    if(session.isOpened()) {
        //Get the list of permissions associated with the session
        List<String> permissions = session.getPermissions();
        //if the session does not have video_upload permission
        if(!permissions.contains("video_upload")) {
            //Get the permission from user to upload the video to facebook
            Session.NewPermissionsRequest newPermissionsRequest = new Session
                    .NewPermissionsRequest(this, Arrays.asList("video_upload"));
            session.requestNewReadPermissions(newPermissionsRequest);
        }


        //Create a new file for the video 
        File file = new File(path);
        try {
            //create a new request to upload video to the facebook
            Request videoRequest = Request.newUploadVideoRequest(session, file, new Request.Callback() {

                @Override
                public void onCompleted(Response response) {

                    if(response.getError()==null)
                    {
                        Toast.makeText(MainActivity.this, "video shared successfully", Toast.LENGTH_SHORT).show();
                    }
                    else
                    {
                        Toast.makeText(MainActivity.this, response.getError().getErrorMessage(), Toast.LENGTH_SHORT).show();
                    }
                }
            });

            //Execute the request in a separate thread
            videoRequest.executeAsync();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    //Session is not open
    else {
        Toast.makeText(getApplicationContext(), "Please login to facebook first", Toast.LENGTH_SHORT).show();
    }

参考资料:

Facebook for android video upload - works with one app and not with another

Is uploading videos from an SD Card to Facebook possible with the Facebook SDK?

注意:根据FB的规则,视频应该少于12 FB

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33051363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档