Facebook android login

匿名 (未验证) 提交于 2019-12-03 09:52:54

问题:

In below code i am using facebook provided chrome custom tab feature, facebook login screen is opening in both chrome (if device having chrome browser) or else simple webview and also in facebook app (if device having app) but after granting the general permission graphapi not providing any data even after async call i'm not getting what i am doing wrong in this please help if possible

extra info :- This is calling inside a fragment, facebook login screen is opening in all three way just the callback is not working till now i am not able to find solution for this only get unanswered question, is their any way that we can contact facebook regarding this.

gradle dependencies

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

android manifest code

    <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> 

login code

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:

Finally found the solution. Well when you are doing this in fragment you have to make

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

in activity also as this sdk trigger that in activity from their you have to pass it to your fragment (replace fragment with your loginfragment)



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!