Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parse SDK Android - Facebook Graph API v2.0

I'm using Parse SDK in my app (https://github.com/ParsePlatform/Parse-SDK-Android).

My app also uses the Facebook Utils in order to provide a login experience with Facebook (https://github.com/ParsePlatform/ParseFacebookUtils-Android)

Recently I've received the following message from Facebook Developers regarding one of my app : "xxx has been making recent API calls to Graph API v2.0, which will reach the end of the 2-year deprecation window on Monday, August 8, 2016. Please migrate all calls to v2.1 or higher in order to avoid potential broken experiences."

How can I fix that problem?

This is my build.gradle file in the dependecies section :

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:1.10.4@aar'
  compile 'com.parse.bolts:bolts-tasks:1.4.0'
  compile 'com.parse.bolts:bolts-applinks:1.4.0'
  compile 'com.jeremyfeinstein.slidingmenu:library:1.3@aar'
  compile 'com.soundcloud.android:android-crop:1.0.0@aar'
  compile 'com.facebook.android:facebook-android-sdk:4.+'
  compile files('libs/universal-image-loader-1.9.3.jar')

}

and this is the only point in code where I use the Facebook SDK:

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

                    }
                }
            });

        }

    });    

this is the AsyncTask used to download the Facebook profile image:

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();

    }

}

How can I upgrade to Graph API v2.0? Should I wait an update from the Parse-SDK?

like image 558
jiraya85 Avatar asked Jun 21 '16 23:06

jiraya85


2 Answers

It seems to be a bug. A bug report has been filled and is currently being investigated.

like image 55
krow Avatar answered Nov 15 '22 22:11

krow


From fb docs. I don't see in your code, that you specify the Graph version so:

An unversioned call will default to the oldest available version of the API. An unversioned call will always point to the oldest version still available at the top of the chart. This is currently v2.0, but after two years it'll be v2.1, then v2.2, etc.

Here you have more inforamtion about graph version

like image 43
Panczur Avatar answered Nov 15 '22 22:11

Panczur