2017-06-01 3 views
1

Ich versuche, die Facebook-Profilseite eines Benutzers zu öffnen, wie gezeigt here. In meiner App, Benutzeranmeldung nach der Erlaubnis zu meiner App und ich bekomme die üblichen Details wie FB ID, Name, E-Mail, etc. Aber ich kann nicht die Profilseite im Browser mit FB ID öffnen. Gibt es eine andere Möglichkeit, die Profilseite anzuzeigen?FB-Profil eines Benutzers im Browser öffnen


 
public class MainActivity extends AppCompatActivity { 
 

 
    CallbackManager callbackManager; 
 
    AccessTokenTracker accessTokenTracker; 
 
    AccessToken accessToken; 
 
    String fbid; 
 

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

 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
 

 
     facebookOncreateCalling(); 
 

 
     Button loginbtn = (Button) findViewById(R.id.loginbtn); 
 
     loginbtn.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View view) { 
 
       try { 
 
        LoginManager.getInstance().logOut(); 
 

 
       } catch (Exception e) { 
 
        e.printStackTrace(); 
 
       } 
 

 
       LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile", "user_friends", "email", "user_birthday", "user_about_me")); 
 
      } 
 
     }); 
 

 
     
 
\t // Here I want to open facebook profile page in browser 
 
     Button openWeb = (Button)findViewById(R.id.openWeb); 
 
     openWeb.setOnClickListener(new View.OnClickListener() { 
 
      @Override 
 
      public void onClick(View v) { 
 
       /*Intent facebookIntent = new Intent(Intent.ACTION_VIEW); 
 
       //String facebookUrl = "http://www.facebook.com/"+fbid; 
 

 
       String facebookUrl = "https://www.facebook.com/profile.php?id=" + fbid; 
 

 
       facebookIntent.setData(Uri.parse(facebookUrl)); 
 
       startActivity(facebookIntent);*/ 
 

 
       try { 
 

 
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/androiddevs")); 
 
        startActivity(intent); 
 

 
       } catch (Exception e) { 
 

 
        e.printStackTrace(); 
 

 
       } 
 

 
      } 
 

 
     }); 
 

 
    } 
 

 
////////////////////////////// Facebook login starts ////////////////////////////////////// 
 
    private void facebookOncreateCalling() { 
 

 
     try { 
 
      PackageInfo info = getPackageManager().getPackageInfo(
 
        getApplicationContext().getPackageName(), 
 
        PackageManager.GET_SIGNATURES); 
 
      for (Signature signature : info.signatures) { 
 
       MessageDigest md = MessageDigest.getInstance("SHA"); 
 
       md.update(signature.toByteArray()); 
 
       Log.d("Facebook_KeyHash:", "KeyHash:-> " + Base64.encodeToString(md.digest(), Base64.DEFAULT)); 
 

 

 
      } 
 
     } catch (PackageManager.NameNotFoundException e) { 
 
      e.printStackTrace(); 
 
     } catch (NoSuchAlgorithmException e) { 
 
      e.printStackTrace(); 
 
     } catch (Exception e) { 
 
      e.printStackTrace(); 
 
     } 
 

 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
 
     AppEventsLogger.activateApp(this); 
 

 
     callbackManager = CallbackManager.Factory.create(); 
 

 
     LoginManager.getInstance().registerCallback(callbackManager, 
 
       new FacebookCallback<LoginResult>() { 
 
        @Override 
 
        public void onSuccess(LoginResult loginResult) { 
 
         System.out.println("sammy_accessToken "+loginResult.getAccessToken().getToken()); 
 

 
         callGraphApi(loginResult); 
 
        } 
 

 
        @Override 
 
        public void onCancel() { 
 
         Log.e("====Login Activity===","Cancel"); 
 
        } 
 

 
        @Override 
 
        public void onError(FacebookException exception) { 
 
         Log.e("====Login Activity===","Error"+exception); 
 
        } 
 
       }); 
 

 

 
     accessTokenTracker = new AccessTokenTracker() { 
 
      @Override 
 
      protected void onCurrentAccessTokenChanged(
 
        AccessToken oldAccessToken, 
 
        AccessToken currentAccessToken) { 
 
       accessToken = currentAccessToken; 
 
      } 
 
     }; 
 
     accessToken = AccessToken.getCurrentAccessToken(); 
 
    } 
 

 
    private void callGraphApi(final LoginResult loginResult) { 
 
     GraphRequest request = GraphRequest.newMeRequest(
 
       loginResult.getAccessToken(), 
 
       new GraphRequest.GraphJSONObjectCallback() { 
 
        @Override 
 
        public void onCompleted(JSONObject object, GraphResponse response) { 
 
         try { 
 

 
          System.out.println("SAM_output "+object); 
 
          String fbUserId = object.optString("id"); 
 
          String firstName = object.optString("first_name"); 
 
          String lastName = object.optString("last_name"); 
 
          String eMail = object.optString("email"); 
 

 
          System.out.println("SAM_ID:" + " " + fbUserId); 
 
          System.out.println("SAM_First_Name:" + " " + firstName); 
 
          System.out.println("SAM_Last_Name:" + " " + lastName); 
 
          System.out.println("SAM_Email:" + " " + eMail); 
 

 
          fbid = fbUserId; 
 

 
         } catch (Exception e) { 
 
          e.printStackTrace(); 
 
         } 
 
        } 
 
       }); 
 
     Bundle parameters = new Bundle(); 
 
     parameters.putString("fields", "id,name,first_name,last_name,link,birthday,gender,email"); 
 
     request.setParameters(parameters); 
 
     request.executeAsync(); 
 
    } 
 

 
    @Override 
 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
 
     super.onActivityResult(requestCode, resultCode, data); 
 
     callbackManager.onActivityResult(requestCode, resultCode, data); 
 
    } 
 
////////////////////////////// Facebook login ends //////////////////////////////////////// 
 
}

+0

_ „wie ich in einigen SO Post sah, dass username Erlaubnis veraltet“ _ - es gab nie eine solche Erlaubnis ... Die 'username' _field_ wurde von dem Benutzerobjekt mit API v2.0 entfernt worden . – CBroe

+0

Also, wenn es keine Möglichkeit gibt, Benutzernamen zu erhalten, wie Profil eines Benutzers mit FB ID zu öffnen? Ich bearbeite meine Frage für selbe @ CBroe –

+0

Fordern Sie einfach das 'link' Feld aus dem Benutzerprofil an, das Ihnen eine URL in der Form' https: // www.facebook.com/app_scoped_user_id/123456789/'gibt, und das wird auf die tatsächliche Profiladresse des Benutzers umgeleitet, wenn sie in einem Browser aufgerufen wird. – CBroe

Antwort

0

werden Sie Namen von folgenden Aussagen loginusername = response.getString ("name") erhalten;

LoginManager.getInstance().registerCallback(callbackmanager, new FacebookCallback<LoginResult>() { 
    @Override 
    public void onSuccess(final LoginResult loginResult) { 

     GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 
      @Override 
      public void onCompleted(JSONObject jsonObject, GraphResponse graphResponse) { 
       JSONObject response = graphResponse.getJSONObject(); 
       Log.e(LoginActivity.class.getSimpleName(), "response data is" + response.toString()); 
       try { 


        if (response.has("email")) { 
         login_userid = response.getString("id"); 
         **loginusername = response.getString("name");** 
         login_user_email = response.getString("email"); 

         profileUpdate.put("Login", "Facebook Login success"); 

         cleverTap.event.push("Facebook Login success", profileUpdate); 
         creatCustomeDomain.facebookUrl = "https://www.facebook.com/" + login_userid; 
         creatCustomeDomain.name = loginusername; 
         creatCustomeDomain.email = login_user_email; 
         creatCustomeDomain.gcmId = gcmid; 
         creatCustomeDomain.gender = response.getString("gender"); 
         creatCustomeDomain.profileImage = "https://graph.facebook.com/" + login_userid + "/picture?type=large"; 
         socialkey = "facebookUrl"; 
         socialurl = "https://www.facebook.com/" + login_userid; 


         checkCustomerExistance(login_user_email); 

        } else { 
         new CustomAlertDialog(context, new CustomAlertDialog.OnDismisslistener() { 
          @Override 
          public void onDismiss() { 
           fblogout(); 
          } 
         }).showAlertDialog("OOPS!!", "Something went Wrong"); 

        } 

        //gotoShowQrActivity(creatCustomeDomain); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 

      } 
     }); 

     Bundle parameters = new Bundle(); 
     parameters.putString("fields", "id,name,email,gender,birthday"); 
     request.setParameters(parameters); 
     request.executeAsync(); 

    } 

    @Override 
    public void onCancel() { 
     profileUpdate.put("Login", "Facebook Login on Cancel"); 

     cleverTap.event.push("Facebook Login on Cancel", profileUpdate); 
     LoggerUtils.error(LoginActivity.class.getSimpleName(), "on cancel"); 

    } 

    @Override 
    public void onError(FacebookException e) { 
     LoggerUtils.error(LoginActivity.class.getSimpleName(), "on error" + e); 

     profileUpdate.put("Login", "Facebook Login Error"); 

     cleverTap.event.push("Facebook Login Error", profileUpdate); 
    } 
}); 
+0

Ich benötige nicht den vollständigen Namen des Benutzers, sondern dessen Kontonutzername. Versuchen Sie, diesen Link im Browser "https: // touch.facebook.com/androiddevs" zu öffnen. Auf der linken Seite sehen Sie den Namen und den Benutzernamen des Kontos. –

+0

Ich hoffe, du bekommst keinen Benutzernamen. weil sie in ihrer Konsole dieses Ding nicht erwähnt haben. Aber versuchen Sie Ihr Glück –

Verwandte Themen