4

公式の SDK ベータ 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; ... // 呼び出しから取得したユーザー オブジェクトを割り当てて、ユーザーの情報を取得します

文字列宗教 = mUser.getProperty("宗教").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)
4

6 に答える 6

5

セッションが作成された後、権限を追加できます。セッションを閉じずに

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

            session.requestNewReadPermissions(newPermissionsRequest);
于 2013-04-12T13:27:54.017 に答える
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"));
于 2013-04-28T17:29:34.450 に答える
0

GraphUser には、引き出して読み取ることができる一般的なプロパティの限られたセットしかありません。例: birthday. 宗教のようなものを読むには、次のようにします。

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

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

うまくいけば、これはあなたの質問に答えます。

于 2012-11-07T19:40:27.630 に答える
0

mUser が null でないかどうかを確認します。

于 2012-11-08T18:03:03.133 に答える
0

Graph API Explorerへのリンクは次のとおりです。適切なアプリケーションを選択し、アクセス トークンの作成をクリックするだけです。ポップアップ ダイアログで、優先する権限を設定できます。

「SessionLoginSample」という元の例でわかるように、TOKEN を受け取った後、「https://graph.facebook.com/me?access_token=insert_your_real_token&format=json」から入手できる JSON ファイル構造を呼び出すことができます。

その json ファイルは、ユーザーのプライベート設定により利用可能なすべての情報を含む応答です。

お役に立てば幸いです。

于 2013-02-14T11:14:21.747 に答える
0
    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(セッション);
あなたのコードに欠けている行です...(そしてビルダー)

于 2013-07-26T20:23:31.503 に答える