新的Facebook权限API(v2.0)支持

时间:2014-06-03 22:01:50

标签: facebook-graph-api login permissions unity3d facebook-unity-sdk

在阅读新的Facebook权限API文档(v2.0)后,我更新了我的Unity3D应用程序,以请求public_profileuser_friends权限,而不是最近弃用的basic_info之一。

自:

FB.Login ("basic_info,publish_actions", LoginCallback);

要:

FB.Login ("public_profile,user_friends,publish_actions", LoginCallback);

在Unity编辑器和iOS版本中一切正常,但在我的Android设备上执行应用程序时,我可以看到打印到终端的下一条错误消息:

W/fb4a(:<default>):BlueServiceQueue( 2275): Exception during service
W/fb4a(:<default>):BlueServiceQueue( 2275): com.facebook.http.protocol.ApiException: invalid permissions: public_profile
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.http.protocol.ApiResponseChecker.b(ApiResponseChecker.java:86)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.http.protocol.ApiResponseChecker.a(ApiResponseChecker.java:139)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.http.protocol.ApiResponse.g(ApiResponse.java:149)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.platform.auth.server.GetPermissionsDescriptionMethod.a(GetPermissionsDescriptionMethod.java:135)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.platform.auth.server.GetPermissionsDescriptionMethod.a(GetPermissionsDescriptionMethod.java:33)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.http.protocol.ApiResponseHandler.a(ApiResponseHandler.java:59)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.http.protocol.ApiResponseHandler.handleResponse(ApiResponseHandler.java:31)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.http.common.FbHttpRequestProcessor.a(FbHttpRequestProcessor.java:312)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.http.common.FbHttpRequestProcessor.a(FbHttpRequestProcessor.java:142)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.http.common.FbHttpRequestProcessor.b(FbHttpRequestProcessor.java:98)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.http.common.FbHttpRequestProcessor.a(FbHttpRequestProcessor.java:228)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.http.protocol.SingleMethodRunnerImpl.a(SingleMethodRunnerImpl.java:415)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.http.protocol.SingleMethodRunnerImpl.a(SingleMethodRunnerImpl.java:170)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.http.protocol.AbstractSingleMethodRunner.a(AbstractSingleMethodRunner.java:18)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.platform.auth.server.GetPermissionStringOperation.a(GetPermissionStringOperation.java:117)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.platform.auth.server.GetPermissionStringOperation.a(GetPermissionStringOperation.java:81)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.platform.auth.server.GetPermissionStringOperation.a(GetPermissionStringOperation.java:66)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.platform.common.server.PlatformOperationHandler.a(PlatformOperationHandler.java:60)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.fbservice.service.BlueServiceQueue.e(BlueServiceQueue.java:345)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.fbservice.service.BlueServiceQueue.d(BlueServiceQueue.java:56)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.fbservice.service.BlueServiceQueue$3.run(BlueServiceQueue.java:265)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at com.facebook.common.executors.ListenableScheduledFutureImpl.run(ListenableScheduledFutureImpl.java:59)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at android.os.Handler.handleCallback(Handler.java:733)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at android.os.Handler.dispatchMessage(Handler.java:95)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at android.os.Looper.loop(Looper.java:146)
W/fb4a(:<default>):BlueServiceQueue( 2275):     at android.os.HandlerThread.run(HandlerThread.java:61)
W/fb4a(:<default>):GDPDialog( 2275): Failed to load
W/fb4a(:<default>):GDPDialog( 2275): com.facebook.fbservice.service.ServiceException: API_ERROR: API_ERROR
W/fb4a(:<default>):GDPDialog( 2275):    at com.facebook.fbservice.ops.BlueServiceOperation.c(BlueServiceOperation.java:639)
W/fb4a(:<default>):GDPDialog( 2275):    at com.facebook.fbservice.ops.BlueServiceOperation.c(BlueServiceOperation.java:47)
W/fb4a(:<default>):GDPDialog( 2275):    at com.facebook.fbservice.ops.BlueServiceOperation$2.run(BlueServiceOperation.java:604)
W/fb4a(:<default>):GDPDialog( 2275):    at android.os.Handler.handleCallback(Handler.java:733)
W/fb4a(:<default>):GDPDialog( 2275):    at android.os.Handler.dispatchMessage(Handler.java:95)
W/fb4a(:<default>):GDPDialog( 2275):    at android.os.Looper.loop(Looper.java:146)
W/fb4a(:<default>):GDPDialog( 2275):    at android.app.ActivityThread.main(ActivityThread.java:5487)
W/fb4a(:<default>):GDPDialog( 2275):    at java.lang.reflect.Method.invokeNative(Native Method)
W/fb4a(:<default>):GDPDialog( 2275):    at java.lang.reflect.Method.invoke(Method.java:515)
W/fb4a(:<default>):GDPDialog( 2275):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
W/fb4a(:<default>):GDPDialog( 2275):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
W/fb4a(:<default>):GDPDialog( 2275):    at dalvik.system.NativeStart.main(Native Method)

这个错误是什么意思?我该如何解决?

我正在使用Unity v4.3.4f1和后期Facebook SDK v5.2.1 (FacebookSDK-140527.unitypackage)

提前致谢。

4 个答案:

答案 0 :(得分:4)

有类似的问题 - 在iOS上工作,但不在Android上工作。我必须改回&#34; basic_info&#34;作为许可列表的一部分,它现在工作正常。

答案 1 :(得分:1)

我有同样的问题但在我的情况下我需要用户的电子邮件和朋友列表。 在请求此信息时,会自动添加public_profile,因此您也可以使用它。

尝试使用“email,user_friends”

答案 2 :(得分:0)

就我而言,问题出在设备上,FB应用程序 我的解决方法是通过FB应用程序禁用授权并仅使用对话框

 openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);

答案 3 :(得分:0)

以下是我用于解决此问题的两种方法。似乎工作正常。

private void setPermissionNeededtoPost(){
if( CheckForApp("com.facebook.katana") )facebookappisinstalledonthisdevice = true;
    if(facebookappisinstalledonthisdevice){
        permissionNeededtoPost = "email,user_friends,publish_actions";
    }else{
        permissionNeededtoPost = "publish_actions";
    }
}

private bool CheckForApp(string appID)
{
    AndroidJavaClass up = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject ca = up.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaObject PackageManager = ca.Call<AndroidJavaObject>("getPackageManager");
    AndroidJavaObject list = PackageManager.Call<AndroidJavaObject>("getInstalledPackages",0);
    int num = list.Call<int>("size");
    for(int i = 0; i < num; i++)
    {
        AndroidJavaObject info = list.Call<AndroidJavaObject>("get", i);
        string appName = info.Get<string>("packageName");
        if(appName.CompareTo(appID) == 0)
        {
            return true;
        }
    }
    return false;
}