Parse SDK Android - Facebook Graph API v2.0
Posted
技术标签:
【中文标题】Parse SDK Android - Facebook Graph API v2.0【英文标题】: 【发布时间】:2016-06-21 23:50:28 【问题描述】:我在我的应用程序中使用 Parse SDK (https://github.com/ParsePlatform/Parse-SDK-android)。
我的应用程序还使用 Facebook 实用程序来提供 Facebook 登录体验 (https://github.com/ParsePlatform/ParseFacebookUtils-Android)
最近我收到了 Facebook 开发人员关于我的一个应用的以下消息:“xxx 一直在对 Graph API v2.0 进行最近的 API 调用,这将在周一达到 2 年弃用窗口的结束, 2016 年 8 月 8 日。请将所有调用迁移到 v2.1 或更高版本,以避免潜在的损坏体验。”
我该如何解决这个问题?
这是我在依赖部分中的 build.gradle 文件:
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')
这是我使用 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
);
);
这是用于下载 Facebook 个人资料图片的 AsyncTask:
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 v2.0?我应该等待 Parse-SDK 的更新吗?
【问题讨论】:
我也收到了这封邮件,不知道怎么解决。 【参考方案1】:这似乎是一个错误。 bug report 已填写,目前正在调查中。
【讨论】:
【参考方案2】:来自fb docs。 我没有在您的代码中看到您指定了 Graph 版本:
未版本化的调用将默认使用 API 的最旧可用版本。未版本化的调用将始终指向图表顶部仍然可用的最旧版本。目前是 v2.0,但两年后会是 v2.1,然后是 v2.2,等等。
这里有更多关于graph version的信息
【讨论】:
以上是关于Parse SDK Android - Facebook Graph API v2.0的主要内容,如果未能解决你的问题,请参考以下文章
使用 Parse Android SDK 实现 OR 条件?
在 Android 8.0 中未显示使用 parse sdk 的推送通知
在 Parse SDK Android 中使用未保存的 id null 固定对象查询本地数据存储
Facebook Android SDK 4.0:newGraphPathRequest 返回“必须使用活动访问令牌来查询有关当前用户的信息。”