Поддержка нового API разрешений Facebook (v2.0)

После прочтения новой документации API разрешений Facebook (v2.0) , я обновил свое приложение Unity3D, чтобы запросить разрешения public_profile и user_friends вместо недавно устаревшего разрешения basic_info.

От:

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

To:

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).

Заранее спасибо.


person georgepiva    schedule 03.06.2014    source источник
comment
Вы пытались сделать это с предыдущим SDK Facebook (5.1)? Я нашел много ошибок в этой новой версии   -  person Gaston Claret    schedule 05.06.2014
comment
Привет @GastonClaret. Да. На самом деле я использовал старый SDK Facebook, когда впервые увидел этот ApiException (v5.0.4 - FacebookSDK-140220-beta.unitypackage), и поэтому я подумал, что его обновление до самой последней версии решит проблему, но не повезло.   -  person georgepiva    schedule 05.06.2014
comment
@GastonClaret Знаете ли вы, должны ли мы обновить наши приложения, чтобы они соответствовали последней версии API разрешений (v2)? Вы нашли какую-нибудь документацию, указывающую, как перейти с API v1 на API v2? Заранее спасибо.   -  person georgepiva    schedule 06.06.2014


Ответы (4)


Была аналогичная проблема - работало на iOS, но не на Android. Мне нужно вернуться к «basic_info» как части списка разрешений, теперь все работает нормально.

person Liangjun    schedule 10.07.2014
comment
Я думаю, что этот хак не работает, когда ваше приложение выпущено в магазине Google Play (в рабочем режиме). - person Liangjun; 09.08.2014

У меня была такая же проблема, но в моем случае мне нужна электронная почта пользователя и список друзей. При запросе этой информации автоматически добавляется public_profile, поэтому, возможно, вы тоже можете его использовать.

Попробуйте использовать только "email, user_friends"

person Fliperamma    schedule 15.07.2014
comment
Благодаря этой работе для меня ясно. Я только что удалил тег public_profile из списка входа в систему. - person Siddharth; 10.09.2014

В моем случае проблема была на устройствах с приложением FB. Мой обходной путь - отключить авторизацию через приложение FB и использовать только диалог.

 openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
person Dehimb    schedule 22.08.2014

Вот два метода, которые я использую для этой проблемы. Кажется, работает нормально.

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;
}
person user2255505    schedule 23.09.2014