【问题标题】:How to get Facebook Additional Permissions with android sdk 3.0 beta?如何使用 android sdk 3.0 beta 获得 Facebook 附加权限?
【发布时间】:2012-11-07 13:03:15
【问题描述】:

我正在使用官方 sdk beta 3.0 为 Android 开发一个简单的 Facebook 应用。

我想在不使用 LoginButton 的情况下为已登录的用户(user_likes、user_interests、friends_likes 等)获得额外的权限(如此处所述 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 宗教 = mUser.getProperty("religion").toString();

这里是我的日志:

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)

【问题讨论】:

    标签: android facebook permissions facebook-android-sdk beta


    【解决方案1】:

    您可以在会话创建后附加权限。不关闭会话

    Session.NewPermissionsRequest newPermissionsRequest = new Session
                        .NewPermissionsRequest(this, Arrays.asList("user_groups"));
    
                session.requestNewReadPermissions(newPermissionsRequest);
    

    【讨论】:

      【解决方案2】:

      向 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"));

      【讨论】:

      • 我尝试像这样设置读取权限:authButton.setReadPermissions(Arrays.asList("email"));,然后尝试像 user.asMap().get("email") 这样访问电子邮件,但它总是返回 null
      【解决方案3】:

      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】:

        检查 mUser 是否不为空。

        【讨论】:

          【解决方案5】:

          这是Graph api explorer 的链接。您只需选择正确的应用程序并单击创建访问令牌。进入弹出对话框,您可以设置首选权限。

          正如您在名为“SessionLoginSample”的原始示例中看到的 - 收到 TOKEN 后,您可以调用 JSON 文件结构,该结构可从“https://graph.facebook.com/me?access_token=insert_your_real_token&format=json”获得

          该 json 文件是对所有可用信息的响应,这些信息由于用户的私人设置而可用。

          希望我能帮上忙。

          【讨论】:

            【解决方案6】:
                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(session);
            是您的代码中缺少的行...(和构建器)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-03-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-02-03
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多