Facebook SDK:ApiException:代理的应用程序无法请求发布权限,而无需事先安装

Posted

技术标签:

【中文标题】Facebook SDK:ApiException:代理的应用程序无法请求发布权限,而无需事先安装【英文标题】:Facebook SDK : ApiException:The proxied app cannot request publish permissions without having being installed previously 【发布时间】:2013-11-19 11:21:39 【问题描述】:

我正在努力使用 android facebook SDK 3.5 riigth ow。一切都与我的帐户完美配合。现在我把应用程序给了我的一个朋友,当他登录时,由于这个失败,他没有登录:

ApiException:The proxied app cannot request publish permissions without having being installed previously

11-19 12:18:43.530: W/System.err(13495): com.facebook.FacebookAuthorizationException: UnknownError: 

ApiException:The proxied app cannot request publish permissions without having being installed previously.
11-19 12:18:43.530: W/System.err(13495):    at com.facebook.Session.handleAuthorizationResult(Session.java:1078)
11-19 12:18:43.530: W/System.err(13495):    at com.facebook.Session.onActivityResult(Session.java:554)
11-19 12:18:43.530: W/System.err(13495):    at com.lochmann.viergewinntmultiplayerfb.MainActivity.onActivityResult(MainActivity.java:289)
11-19 12:18:43.530: W/System.err(13495):    at android.app.Activity.dispatchActivityResult(Activity.java:5390)
11-19 12:18:43.530: W/System.err(13495):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3178)
11-19 12:18:43.530: W/System.err(13495):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3225)
11-19 12:18:43.535: W/System.err(13495):    at android.app.ActivityThread.access$1100(ActivityThread.java:140)
11-19 12:18:43.535: W/System.err(13495):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1275)
11-19 12:18:43.535: W/System.err(13495):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-19 12:18:43.535: W/System.err(13495):    at android.os.Looper.loop(Looper.java:137)
11-19 12:18:43.535: W/System.err(13495):    at android.app.ActivityThread.main(ActivityThread.java:4898)
11-19 12:18:43.535: W/System.err(13495):    at java.lang.reflect.Method.invokeNative(Native Method)
11-19 12:18:43.535: W/System.err(13495):    at java.lang.reflect.Method.invoke(Method.java:511)
11-19 12:18:43.535: W/System.err(13495):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
11-19 12:18:43.535: W/System.err(13495):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
11-19 12:18:43.540: W/System.err(13495):    at dalvik.system.NativeStart.main(Native Method)

这是我的登录代码

public void login(final Activity activity, final IFBCallbacks callback) 
        if (isLoggedin()) 
            if (callback != null)
                callback.onLoggedIn();

            actionsAfterLoggedIn(activity, callback);
            Log.i(TAG, "Already Logged in");
            return;
        
        if (!isLoggedin()) 
            Log.i(TAG, "login() NOT LOGGED IN");
            logout(activity, null);
        
        Log.i(TAG, "NOT LOGGED IN");
        _session = new Session.Builder(activity).build();
        Session.setActiveSession(_session);
        Session.OpenRequest request = new Session.OpenRequest(activity);
        // Note that you cannot set email AND publish_actions in the same
        // request
        request.setPermissions(getNeededPermisiions());
        // request.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
        StatusCallback scallback = new StatusCallback() 

            @Override
            public void call(Session session, SessionState state,
                    Exception exception) 
                if (state.isOpened() && hasPermissions(getNeededPermisiions())) 
                    Log.i(TAG, "Succesfully logged in to facebook");
                    if (callback != null)
                        callback.onLoggedIn();

                    actionsAfterLoggedIn(activity, callback);
                    session.getAccessToken();
                    FBUtils.saveAccesToken(activity, session.getAccessToken(),
                            session.getExpirationDate());
                    return;
                

                // Grant permissions
                if (!session.getPermissions().containsAll(
                        getNeededPermisiions())
                        && session.isOpened()) 
                    Log.i(TAG, "Not all needed Permissions granted");
                    // session.requestNewPublishPermissions(new
                    // Session.NewPermissionsRequest(
                    // activity, getNeededPermisiions()));
                    return;
                

                // EVERYTHING ELSE
                if (!state.isOpened() && exception != null) 
                    Log.e(TAG, "Unable to login in");
                    exception.printStackTrace();
                    if (callback != null)
                        callback.onError(exception);
                
            
        ;

        _session.addCallback(scallback);
        _session.openForPublish(request);
    

我想我需要安装请求,但我找不到任何解决方案来解决它。谁能给我一些提示?

【问题讨论】:

您请求的所有权限是什么?您需要将“读取”和“发布”权限分开,并且在您请求发布权限之前,您至少需要获得“basic_info”,这是一个读取权限。如果您只是在没有任何读取权限的情况下执行 openForPublish,那么您将收到此错误。 谢谢,1 小时前就搞定了。但把它写成答案,你会得到代表 【参考方案1】:

需要将“read”和“publish”权限分开,并且在请求发布权限之前,至少需要先获得“basic_info”,也就是读权限。

如果您只是在没有任何读取权限的情况下执行 openForPublish,那么您将收到此错误。

【讨论】:

你好 MingLi,我也遇到了同样的问题。你能告诉我如何分离 READ 和 PUBLISH 权限,因为当我将它们分成 setReadPermission 和 setPublishPermission 时,它会出错。我的请求权限:authButton.setReadPermissions(Arrays.asList("basic_info, user_friends, read_friendlists, manage_friendlists")); 注意:当我使用这个应用程序时,没关系。但是当其他人使用它时,就会出现“代理的应用程序在没有预先安装的情况下无法请求发布权限” @tana 你有区分权限的解决方案吗?请分享。 我发现我必须先获得 facebook 的批准才能将我的应用分享给朋友。

以上是关于Facebook SDK:ApiException:代理的应用程序无法请求发布权限,而无需事先安装的主要内容,如果未能解决你的问题,请参考以下文章

Facebook iOS SDK 返回错误“com.facebook.sdk 错误 4”

Facebook SDK:在IOS7上无法完成操作(com.facebook.sdk错误2)

在 Facebook-Ios-Sdk 中关闭 Facebook 会话

无法使用 Facebook C# SDK 注销 Facebook

无法使用 Facebook Android SDK 和 Facebook Audience Network SDK 编译

为 Facebook 移动应用安装广告安装 Facebook SDK