2017-03-11 12 views
1

私はフェイスブック提供のクロムカスタムタブ機能を使用しています。 Facebookのログイン画面はクロム(Chromeブラウザを搭載しているデバイスの場合)またはシンプルなwebviewの場合と、しかし、非同期呼び出しの後でもデータを提供していない一般的なパーミッションgraphapiを与えた後、私は何が間違っているのか分かりません。可能であれば助けてください。FacebookのAndroidのログイン

追加情報:これはフラグメント、facebookログイン画面私はこれについて解決策を見つけることができない唯一のコールバックが動作していないすべての3つの方法で開かれている私はこれについてFacebookの連絡先にすることができる任意の方法です未回答の質問を取得します。

のGradleの依存

compile 'com.facebook.android:facebook-android-sdk:[4,5)' 

アンドロイドマニフェストコード

<meta-data android:name="com.facebook.sdk.ApplicationId" 
     android:value="@string/facebook_app_id"/> 

    <activity android:name="com.facebook.FacebookActivity" 
     android:configChanges= 
      "keyboard|keyboardHidden|screenLayout|screenSize|orientation" 
     android:label="@string/app_name" /> 

    <activity 
     android:name="com.facebook.CustomTabActivity" 
     android:exported="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
      <data android:scheme="@string/fb_login_protocol_scheme" /> 
     </intent-filter> 
    </activity> 

ログインコード

facebook_sign.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mCallbackManager = CallbackManager.Factory.create(); 
      LoginManager.getInstance().logInWithReadPermissions(getActivity(), App_Contants.PERMISSIONS); 
      LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() { 
       @Override 
       public void onSuccess(LoginResult loginResult) { 
        GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 
         @Override 
         public void onCompleted(JSONObject object, GraphResponse response) { 
          try { 
           final String id = object.getString("id"); 
           final String name = object.getString("name"); 
           final String email = object.getString("email"); 
           final String gender = object.getString("gender"); 
           final String picture = object.getJSONObject("picture").getJSONObject("data").getString("url"); 
           final String data = id + ", " + name + ", " + email + ", " + gender + ", "+ ", " + picture; 
           Log.e("my_data", response.getRawResponse()); 
          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 
         } 
        }); 
        Bundle parameters = new Bundle(); 
        parameters.putString("fields", "id,name,email,gender,picture.width(400).height(400)"); 
        request.setParameters(parameters); 
        request.executeAsync(); 
       } 

       @Override 
       public void onCancel() { 
        Toast.makeText(mContext,"Facebook Login Cancel",Toast.LENGTH_SHORT).show(); 
       } 

       @Override 
       public void onError(FacebookException error) { 
        error.printStackTrace(); 
       } 
      }); 
     } 
    }); 


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

    if (resultCode == Activity.RESULT_OK) { 
     mCallbackManager.onActivityResult(requestCode, resultCode, data); 
    } 

    // Result returned from launching the Intent from 
    // GoogleSignInApi.getSignInIntent(...); 
    if (requestCode == 1) { 
     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
     if (result.isSuccess()) { 
      GoogleSignInAccount acct = result.getSignInAccount(); 
      // Get account information 
      Log.e("data",acct.getEmail()); 

      mGoogleApiClient.stopAutoManage(getActivity()); 
      mGoogleApiClient.disconnect(); 
     }else if(result.getStatus().isCanceled()){ 
      mGoogleApiClient.stopAutoManage(getActivity()); 
      mGoogleApiClient.disconnect(); 
     }else if(result.getStatus().isInterrupted()){ 
      mGoogleApiClient.stopAutoManage(getActivity()); 
      mGoogleApiClient.disconnect(); 
     }else{ 
      mGoogleApiClient.stopAutoManage(getActivity()); 
      mGoogleApiClient.disconnect(); 
     } 
    } 
} 

答えて

1

最後に解決策を見つけました。あなたがフラグメントでこれをやっているとき、さてあなたは、彼らの活動にあなたは私が

+0

(あなたloginfragmentとの断片を置換)あなたのフラグメントにそれを渡すために持っていることを、このSDKのトリガとしても活動中

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { fragment.onActivityResult(requestCode,resultCode,data); } 

をしなければなりません私はちょうどアンドロイドのデータを取得したい同じ問題に立ち往生しています。私はあなたの解決策に従ったが、うまくいかなかった。私はいくつかのユーザーデータ、すなわちフラグメントにfname、lastnameが必要です。手伝って頂けますか? – Bishwash

+0

あなたのシナリオをどのように実装しようとしているのかを教えてください。 – antoniomerlin

関連する問題