我正在使用官方的sdk beta 3.0为Android开发一个简单的Facebook应用程序。
我会获得用户登录(user_likes,user_interests,friends_likes等等)的额外权限,而不使用LoginButton(如https://developers.facebook.com/docs/howtos/androidsdk/3.0/login-with-facebook/所述),事实上,我获得了额外的权限方法
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
List<String> permission=new ArrayList<String>();
permission.add("user_birthday");
permission.add("user_likes");
permission.add("user_questions");
permission.add("user_interests");
permission.add("user_relationships");
permission.add("user_groups");
permission.add("user_religion_politics");
permission.add("friends_birthday");
permission.add("friends_interests");
permission.add("friends_likes");
permission.add("friends_groups");
permission.add("friends_questions");
permission.add("friends_relationships");
// this.openSession();
this.openSessionForRead(app_id, permission);
}
实际上,它会打开登录视图,要求获得其他权限。
现在,我知道如何获取额外的权限,因为当我调用user.get * * ()时,除了那些基本信息之外,它没有显示其他方法。
谢谢!
我正在使用
获取Null.pointer.exception私有GraphObject mUser; ... //分配您获得的用户对象 获取用户信息的电话
String religion = mUser.getProperty(“religion”)。toString();
这里是我的logcat:
11-08 14:21:47.908: E/AndroidRuntime(1306): FATAL EXCEPTION: main
11-08 14:21:47.908: E/AndroidRuntime(1306): java.lang.NullPointerException
11-08 14:21:47.908: E/AndroidRuntime(1306): at com.********.*****.Main$1.onCompleted(Main.java:123)
11-08 14:21:47.908: E/AndroidRuntime(1306): at com.facebook.Request$1.onCompleted(Request.java:248)
11-08 14:21:47.908: E/AndroidRuntime(1306): at com.facebook.Request$4.run(Request.java:1197)
11-08 14:21:47.908: E/AndroidRuntime(1306): at android.os.Handler.handleCallback(Handler.java:615)
11-08 14:21:47.908: E/AndroidRuntime(1306): at android.os.Handler.dispatchMessage(Handler.java:92)
11-08 14:21:47.908: E/AndroidRuntime(1306): at android.os.Looper.loop(Looper.java:137)
11-08 14:21:47.908: E/AndroidRuntime(1306): at android.app.ActivityThread.main(ActivityThread.java:4745)
11-08 14:21:47.908: E/AndroidRuntime(1306): at java.lang.reflect.Method.invokeNative(Native Method)
11-08 14:21:47.908: E/AndroidRuntime(1306): at java.lang.reflect.Method.invoke(Method.java:511)
11-08 14:21:47.908: E/AndroidRuntime(1306): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-08 14:21:47.908: E/AndroidRuntime(1306): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-08 14:21:47.908: E/AndroidRuntime(1306): at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:5)
会话创建后,您可以获得其他权限。没有关闭会话
Session.NewPermissionsRequest newPermissionsRequest = new Session
.NewPermissionsRequest(this, Arrays.asList("user_groups"));
session.requestNewReadPermissions(newPermissionsRequest);
答案 1 :(得分:3)
将方法添加到Facebook Android SDK项目中的com.facebook.Session.java类中:
public static Session openActiveSession(Activity activity, boolean allowLoginUI, StatusCallback callback, List permissions) {
return openActiveSession(activity, allowLoginUI, new OpenRequest(activity).setCallback(callback).setPermissions(permissions));
}
您可以从代码中直接致电
Session.openActiveSession(LoginActivity.this, true, new Session.StatusCallback() {
// callback when session changes state
@Override
public void call(Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
//YOU CALLBACK CODE
}
}
}, Arrays.asList("email","OTHER_PERMISSIONS_YOU_WANT_TO_REQUEST"));
答案 2 :(得分:1)
Session.Builder bui = new Builder(this); //should be an activity
Session session = bui.build();
Session.OpenRequest openRequest = new OpenRequest(context);
List<String> permission=new ArrayList<String>();
permission.add("user_birthday");
permission.add("user_likes");
permission.add("user_questions");
permission.add("user_interests");
permission.add("user_relationships");
permission.add("user_groups");
permission.add("user_religion_politics");
permission.add("friends_birthday");
permission.add("user_location");
permission.add("friends_likes");
permission.add("friends_groups");
permission.add("user_education_history");
permission.add("friends_relationships");
permission.add("email");
openRequest.setPermissions(permission);
Session.setActiveSession(session);//This will take care of the null pointer
openRequest.setCallback(this);//the callback
session.openForRead(openRequest);
<强> Session.setActiveSession(会话); 强>
是您代码中的缺失行...(和构建器)
答案 3 :(得分:0)
GraphUser只有一组有限的常用属性,你可以提取和阅读,例如:生日。要阅读像宗教这样的其他内容,您可以执行以下操作:
private GraphObject mUser;
...
// Assign the user object you get from a call to get the user's info
String religion = mUser.getProperty("religion").toString();
希望这能回答你的问题。
答案 4 :(得分:0)
检查mUser是否为空。
答案 5 :(得分:0)
以下是Graph api explorer的链接。您只需选择正确的应用程序并单击创建访问令牌。进入弹出对话框,您可以设置首选权限。
正如您在原始示例中看到的那样:“SessionLoginSample” - 收到TOKEN后,您可以调用“https://graph.facebook.com/me?access_token=insert_your_real_token&format=json”中提供的JSON文件结构
该json文件是响应,包含因用户私有设置而可用的所有信息。
我希望我能帮忙。