在阅读新的Facebook权限API文档(v2.0)后,我更新了我的Unity3D应用程序,以请求public_profile
和user_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)
。
提前致谢。
答案 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;
}