2017-06-01 7 views
1

私はユーザーのFacebookプロフィールページを開こうとしています(here)。私のアプリでは、私のアプリに許可を与えた後、ユーザーのログインとFB ID、名前、電子メールなどのような通常の詳細を取得します。しかし、FB IDを使用してブラウザでプロファイルページを開くことができません。プロファイルページを表示する他の方法はありますか?ブラウザ内のユーザーのFBプロフィールを開く


 
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

_ _「私はいくつかで見たように、そのユーザー名許可が廃止されました投稿」 - などの許可があったことはありません... 'username' _field_は、API v2.0のにユーザーオブジェクトから削除されました。 – CBroe

+0

ユーザー名を取得する方法がない場合、FB IDを使用しているユーザーのプロフィールを開く方法は?私は同じ@ CBroeについて私の質問を編集しています –

+0

'https:// www.facebook.com/app_scoped_user_id/123456789 /'の形式でURLを与えるユーザプロファイルから 'link'フィールドを要求するだけです。ブラウザで呼び出されると、ユーザーの実際のプロファイルアドレスにリダイレクトされます。 – CBroe

答えて

0

次の文で名前を取得します loginusername = response.getString( "名前");

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

私はユーザーのフルネームではなくアカウントのユーザー名が必要です。このリンクをブラウザ 'https:// touch.facebook.com/androiddevs'で開きます。名前とアカウントのユーザー名が左側に表示されます。 –

+0

私はあなたがユーザー名を取得しないことを願っています。彼らのコンソールで彼らはこの事を言及していないので、あなたの幸運を試して –

関連する問題