एफबी एंड्रॉइड ऐप लॉगिन में नई पढ़ने की अनुमति पूछें

मुझे यह आसान समस्या है: मैं एंड्रॉइड पर एफबी एसडीके 3.5 के साथ एक साधारण लॉगिन लागू करने की कोशिश कर रहा हूं। मुझे उपयोगकर्ता को सामान्य बटन (कोई FBLogin बटन) पर क्लिक करने और ईमेल प्राप्त करने की आवश्यकता नहीं है।

अब तक मैं एफबी एसडीके द्वारा प्रदान की गई मूल अनुमतियों के साथ लॉगिन संभाल सकता हूं, लेकिन मैं उपयोगकर्ता को अतिरिक्त अनुमति का अनुरोध करने में सक्षम नहीं हूं।

मैंने स्टैक ओवरफ्लो पर इन उत्तरों को पढ़ा है:

मैंने एफबी पृष्ठों पर इस ट्यूटोरियल को पढ़ा है:

अब तक मेरे पास यह कोड केवल मूलभूत जानकारी (एफबी द्वारा प्रदान की गई डिफ़ॉल्ट जानकारी) के लिए "काम कर रहा है" है।

FacebookLogin.activity

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_facebook_login); 


        pref = setApplicationContext().getSharedPreferences(MainActivity.SHARED_PREFERENCES, 0);//0 for private mode

         if (internetConnection()) {

           //start Facebook Login
            Session.openActiveSession(this, true, new Session.StatusCallback() {            

             //callback when session changes state
              @Override       
              public void call(final Session session, SessionState state, Exception exception) {


              if (session.isOpened()) {


                **// TRYING TO ADD NEW PERMISSIONS but doesn't work**
                Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(FacebookLogin.this, **PERMISSIONS**);
                session.requestNewReadPermissions(newPermissionsRequest);           




               //riquest /me API                
                Request.newMeRequest(session, new Request.GraphUserCallback() {

               //callback after Graph API response with user object
                @Override
                public void onCompleted(GraphUser user, Response response) {
                  if (user != null) { 

                      Editor pref_editor = pref.edit();

                     //token
                      pref_editor.putString(PREF_FB_ACCESS_TOKEN, session.getAccessToken());

                     //DEBUG
                      Log.i(LOG_ACTIVITY, "FB_token: "+session.getAccessToken());
                      Log.i(LOG_ACTIVITY, "FB_permissions: "+ session.getPermissions());

                     //user_id                     
                      pref_editor.putString(PREF_FB_USER_ID, user.getId());

                     //email
                      //pref_editor.putString(PREF_FB_USER_EMAIL,);


                     pref_editor.commit(); 
                  }
                }
              }).executeAsync();

                 Intent intent = new Intent(FacebookLogin.this, AfterLogin.class);
                 intent.putExtra(LOGIN_ORIGIN, "facebook");
                 startActivity(intent);
                 finish();

            }


            if (session.isClosed()){

               //do nothing.FB call to FBapp

            }         
          }
        }); 


        }       

        else {


            Toast.makeText(getApplicationContext(), "error: no internet", Toast.LENGTH_SHORT).show();


            Intent intent = new Intent(FacebookLogin.this, MainActivity.class);
            startActivity(intent);
            finish();
        }
    }

इसके अलावा मेरे पास कक्षा/गतिविधि के अंदर एक्टिविटी रिसेट विधि है

     @Override
      public void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);          

          Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
      } 



Is there someone that knows how to fix it? Thanks in advance.

0
मुझे नहीं पता कि आप जो जानकारी पूछ रहे हैं उसे जांचना है, मैं केवल अपनी डीबग जानकारी देखने के लिए लॉगकैट का उपयोग करता हूं। इसके अलावा मैं नए अनुमति अनुरोध संवाद देख सकता हूं लेकिन मेरे पास "ठीक" बटन दबाए रखने का समय नहीं है, फिर यह अगली गतिविधि पर जाता है जैसा कि करना चाहिए। लेकिन अगर मैं एफबी मंच पर टोकन_डेबगर के साथ टोकन की जांच करता हूं, तो मैं केवल उन बुनियादी अनुमतियों (आईडी, नाम, आदि ..) देख सकता हूं जिन्हें मैंने पूछा था।
जोड़ा लेखक shaolin, स्रोत
क्या लॉगकैट में कुछ है? जब आप अतिरिक्त अनुमति मांगते हैं तो आप क्या व्यवहार देखते हैं?
जोड़ा लेखक Ming Li, स्रोत

1 उत्तर

Finally problem solved in this way. Hope it can be useful for someone.
Inside my activity:

निजी सत्र। स्टेटस कॉलबैक स्थिति कॉलबैक = नया   SessionStatusCallback ();


onCreate() or onClick() of some button

सत्र.ऑपेनएक्टिव सत्र (मुख्य गतिविधि। यह, सत्य, स्थिति कॉलबैक);


In the activiy I need to put this class:

private class SessionStatusCallback implements Session.StatusCallback{


    @Override
    public void call(Session session, SessionState state, Exception exception){
       //response to session changes
        Toast.makeText(MainActivity.this, "chiamata FB call", Toast.LENGTH_SHORT).show();

        if(session.isOpened()) {
            /// debug
            Log.i(LOG_ACTIVITY,"..session opened..ask for additional permissions");


           //additional permissions
            List permissions = Arrays.asList("email, user_about_me, user_likes");
            Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(MainActivity.this, permissions);
            session.requestNewReadPermissions(newPermissionsRequest);

            //debug             
            Log.i(LOG_ACTIVITY,"..token:"+ session.getAccessToken());



           //request data
            Request.newMeRequest(session, new Request.GraphUserCallback() {

                @Override
                public void onCompleted(GraphUser user, Response response) {
                    if(user != null){
                        Toast.makeText(MainActivity.this, "ciao "+user.getName(), Toast.LENGTH_SHORT).show();
                    }

                }


            });

        }

   //check permissions
        List fb_permissions = session.getPermissions();
        if ( fb_permissions.contains("email")){

           //new permission ok, go to next activity
            Intent intent = new Intent (MainActivity.this, AfterLogin.class);
            startActivity(intent);
            finish();
        }

        else{
           //display toast
            Toast.makeText(MainActivity.this, "problems with permsissions..", Toast.LENGTH_SHORT).show();
        }

    }
}

और यह विधि भी:

public void onActivityResult(int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode, resultCode, data);
        Session.getActiveSession().onActivityResult(MainActivity.this, requestCode, resultCode, data);
    }



And then it works. But I still don't know how to handle the errors or if the user doesn't accept the permissions. Anyway thanks for the support and hope my work can be useful to someone.

जैसा कि फेसबुक डेवलपर के पेज (मेनिफेस्ट फ़ाइल) में कहा गया है, और फेसबुक ऐप पर पैकेज और गतिविधि नाम फ़ील्ड भरने की गतिविधि को पंजीकृत करना याद रखें।

0
जोड़ा