2012-11-07 71 views
4

我正在開發一個使用官方sdk beta 3.0的Android簡單Facebook應用程序。如何使用android sdk 3.0 beta獲取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 * *()時,它不會顯示除基本信息之外的其他方法。

謝謝!


我得到使用

私人GraphObject MUSER一個Null.pointer.exception; ... //指定從 獲得的用戶對象獲得用戶信息

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

GraphUser只有一組有限的,你可以調閱,前通用屬性:生日。要閱讀別人說say宗教,你可以做以下幾點:

private GraphObject mUser; 
... 
// Assign the user object you get from a call to get the user's info 

String religion = mUser.getProperty("religion").toString(); 

希望這會回答你的問題。

0

檢查mUser是否不爲空。

0

這裏是鏈接到Graph api explorer。您只需選擇正確的應用程序並單擊創建訪問令牌。進入彈出對話框,您可以設置首選權限。

正如你可以叫原來的例子中看到:「SessionLoginSample」 - 你收到令牌之後,你可以調用JSON文件結構,可從「https://graph.facebook.com/me?access_token=insert_your_real_token&format=json

這JSON文件是響應與是全部信息由於用戶的私人設置可用。

我希望我能幫上忙。

5

創建會話後,您可以獲得額外的權限。不關閉會話

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

      session.requestNewReadPermissions(newPermissionsRequest); 
3

向com.facebook.Session添加一個方法。Facebook的Android SDK中的項目中的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"));
+0

我試圖設置讀取權限是這樣的:'authButton.setReadPermissions(Arrays.asList(「電子郵件」));'然後試着像這樣'user.asMap()。get(「email」)'訪問電子郵件',但總是返回'null'。 – toobsco42

+0

謝謝,這對我有用.. – MithunRaj

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(會話);
在代碼中缺少的行...(和製造商)

相關問題