Parse SDK Android - Facebook Graph API v2.0

Я использую Parse SDK в своем приложении (https://github.com/ParsePlatform/Parse-SDK-Android).

Мое приложение также использует Facebook Utils для обеспечения входа в систему с помощью Facebook (https://github.com/ParsePlatform/ParseFacebookUtils-Android)

Недавно я получил следующее сообщение от разработчиков Facebook в отношении одного из моих приложений: "xxx делал недавние вызовы API для Graph API версии 2.0, которые достигнут конца 2-летнего окна устаревания в понедельник, 8 августа 2016 года. Пожалуйста, перенесите все вызовы на v2.1 или выше, чтобы избежать потенциальных нарушений."

Как я могу исправить эту проблему?

Это файл build.gradle в разделе dependecies:

dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
  testCompile 'junit:junit:4.12'
  compile 'com.parse:parse-android:1.13.1'
  compile 'com.parse:parsefacebookutils-v4-android:[email protected]'
  compile 'com.parse.bolts:bolts-tasks:1.4.0'
  compile 'com.parse.bolts:bolts-applinks:1.4.0'
  compile 'com.jeremyfeinstein.slidingmenu:library:[email protected]'
  compile 'com.soundcloud.android:android-crop:[email protected]'
  compile 'com.facebook.android:facebook-android-sdk:4.+'
  compile files('libs/universal-image-loader-1.9.3.jar')

}

и это единственная точка в коде, где я использую SDK для Facebook:

ParseFacebookUtils.logInWithReadPermissionsInBackground(Login.this, permissions, new LogInCallback() {
                @Override
                public void done(final ParseUser user, ParseException err) {

                    fbdialog = new ProgressDialog(Login.this);
                    fbdialog.setTitle("Contacting Facebook");
                    fbdialog.setMessage("Please wait a moment. We are contacting Facebook to perform the registration");
                    fbdialog.show();

                    if (user == null) {
                        Log.d("MyApp", "Uh oh. The user cancelled the Facebook login.");
                        fbdialog.cancel();

                    } else if (user.isNew() || !user.isNew()) {
                        Log.d("MyApp", "User signed up and logged in through Facebook!" + AccessToken.getCurrentAccessToken());

                        GraphRequest request = GraphRequest.newMeRequest(
                                AccessToken.getCurrentAccessToken(),
                                new GraphRequest.GraphJSONObjectCallback() {
                                    @Override
                                    public void onCompleted(
                                            JSONObject object,
                                            GraphResponse response) {

                                        if(response!=null) {

                                            try {
                                                String nome = object.getString("name");
                                                String email = object.getString("email");
                                                String gender = object.getString("gender");

                                                final String facebookid = object.getString("id");

                                                ParseUser utente = ParseUser.getCurrentUser();

                                                utente.put("namelastname", nome);
                                                utente.put("email", email);
                                                utente.put("gender", gender);

                                                utente.saveInBackground(new SaveCallback() {
                                                    @Override
                                                    public void done(ParseException e) {

                                                        if (e == null) {
                                                            ParseInstallation installation = ParseInstallation.getCurrentInstallation();
                                                            installation.put("idutente", user);
                                                            installation.saveInBackground();

                                                            //downloading the user profile image from facebook
                                                            AsyncTaskLoad as = new AsyncTaskLoad();
                                                            as.execute("https://graph.facebook.com/" + facebookid + "/picture?type=large");

                                                            fbdialog.cancel();

                                                        } else {

                                                            fbdialog.cancel();

                                                            e.printStackTrace();


                                                        }
                                                    }
                                                });


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

                        Bundle parameters = new Bundle();
                        parameters.putString("fields", "id,name,link,email,age_range,gender,birthday");
                        request.setParameters(parameters);
                        request.executeAsync();


                    } else {

                        Log.d("MyApp", "User logged in through Facebook!");

                        ParseInstallation installation = ParseInstallation.getCurrentInstallation();
                        installation.put("idutente", user);
                        installation.saveInBackground();

                        fbdialog.cancel();

                        //here I start a new activity

                    }
                }
            });

        }

    });    

это AsyncTask, используемая для загрузки изображения профиля Facebook:

private class AsyncTaskLoad extends AsyncTask<String, Void, Void> {
    @Override
    protected void onPreExecute() {

        pd = new ProgressDialog(Login.this);
        pd.setTitle("Logging");
        pd.show();
    }

    @Override
    protected Void doInBackground(String... strings) {

        try {
            URL image_value = new URL(strings[0]);
            SynchroHelper sync = new SynchroHelper(Login.this);
            //simple http method to download an image and save it into a file in the external storage dir
            sync.downloadImage(image_value.toString(), "myprof.jpg", Environment.getExternalStorageDirectory());

        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;

    }

    @Override
    protected void onPostExecute(Void params) {

        //starting a new activity...
        pd.dismiss();

    }

}

Как я могу перейти на Graph API версии 2.0? Должен ли я ждать обновления из Parse-SDK?

Ответ 1

Кажется, это ошибка. Отчет отчет об ошибке был заполнен и в настоящее время исследуется.

Ответ 2

Из fb docs. Я не вижу в вашем коде, что вы указываете версию Graph так:

Неверсифицированный вызов по умолчанию будет использоваться для самой старой доступной версии API. Неверсифицированный вызов всегда будет указывать на самую старую версию, доступную в верхней части диаграммы. В настоящее время это v2.0, но через два года это будет v2.1, затем v2.2 и т.д.

Здесь у вас есть дополнительная информация о версия графика