2015-09-08 7 views
0

Я работаю над входом через google plus в своем проекте. Но проблема, с которой я столкнулся здесь, - после нажатия кнопки google plus в button.it просит меня выбрать учетную запись google plus из списка учетных записей устройств и после выбора кнопки ничего не происходит. Мне нужно снова нажать кнопку google plus, чтобы вызвать метод OnConnected(). Но я хочу, чтобы OnConnected() был вызван при первом нажатии кнопки после выбора учетной записи google. Пожалуйста помоги.Ошибка в Google плюс вход с android

Here is my code for my complete java class: 



    public class LoginFragment extends Fragment implements View.OnClickListener,GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { 
    TextView Fpassword, Signup; 
    EditText email, password; 
    ImageView Signin, fb_button, gplus_button; 
    LogInActivity myContext; 
    static String personName; 
    static int requestcode; 
    Validation validation; 
    String LOG_TAG="ani"; 
    ProgressDialog pd; 
    ProgressDialog dialog; 
    private boolean mIntentInProgress; 
    FragmentManager fragmentManager; 
    private CallbackManager callbackmanager; 
    //for G+ 
    private static final int PROFILE_PIC_SIZE = 50; 
    static GoogleApiClient mGoogleApiClient; 
    private ConnectionResult mConnectionResult; 
    private boolean mSignInClicked; 
    static final int RC_SIGN_IN = 0; 
    /* Is there a ConnectionResult resolution in progress? */ 
    private boolean mIsResolving = false; 
    private RequestQueue mQueue; 
    /* Should we automatically resolve ConnectionResults when possible? */ 
    private boolean mShouldResolve = false; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mGoogleApiClient = new GoogleApiClient.Builder(getActivity()).addConnectionCallbacks(this).addOnConnectionFailedListener(this).addApi(Plus.API).addScope(new Scope(Scopes.PROFILE)).build(); 
     callbackmanager = CallbackManager.Factory.create(); 

    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     myContext = (LogInActivity) activity; 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_login, container, false); 
     Fpassword = (TextView) view.findViewById(R.id.ForgotPassword); 
     Signup = (TextView) view.findViewById(R.id.SignUp); 
     email = (EditText) view.findViewById(R.id.Email_Val); 
     password = (EditText) view.findViewById(R.id.PasswordVal); 
     Signin = (ImageView) view.findViewById(R.id.signin); 
     fb_button = (ImageView) view.findViewById(R.id.FB_btn); 
     //facebook and google connection manager initialisation.. 
     gplus_button = (ImageView) view.findViewById(R.id.Gplus_btn); 
     FacebookSdk.sdkInitialize(getActivity().getApplicationContext()); 
     Fpassword.setPaintFlags(Fpassword.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); 
     Signup.setPaintFlags(Signup.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); 
     email.setHintTextColor(Color.parseColor("#727272")); 
     password.setHintTextColor(Color.parseColor("#727272")); 
     Fpassword.setOnClickListener(this); 
     Signup.setOnClickListener(this); 
     Signin.setOnClickListener(this); 
     fb_button.setOnClickListener(this); 
     gplus_button.setOnClickListener(this); 
     validation = new Validation(); 
     return view; 

    } 

    @Override 
    public void onClick(View v) 
    { 
     if (v.getId() == R.id.ForgotPassword) 
     { 
      Fragment forgotpassword = new ForgotPasswordFragment(); 
      myContext.getSupportFragmentManager().beginTransaction().add(R.id.container_login, forgotpassword).addToBackStack("fragBack1").commit(); 

     } 
     else if (v.getId() == R.id.SignUp) 
     { 
      Fragment signup = new SignUpFragment(); 
      myContext.getSupportFragmentManager().beginTransaction().add(R.id.container_login, signup).addToBackStack("fragBack1").commit(); 

     } 

     else if (v.getId() == R.id.signin) 
     { 


      if (!validation.isValidEmail(email.getText().toString())) { 

       email.setError("please enter a Valid Email Address"); 
      } 

      if (!validation.isValidPassword(password.getText().toString())) { 

       password.setError("min password length has to be 6"); 
      } 

      if (validation.isValidEmail(email.getText().toString()) && validation.isValidPassword(password.getText().toString())) 
      { 
       if (Network.isNetworkAvailable(myContext)) 
       { 
        signInVolley(); 
       } 
       else 
       { 
        Toast.makeText(myContext, "no internet connection", Toast.LENGTH_SHORT).show(); 
       } 

      } 
     } 
     else if (v.getId() == R.id.FB_btn) 
     { 
      if (Network.isNetworkAvailable(myContext)) 
      {//Intent intent_signin = new Intent(myContext, HomeActivity.class); 
       // startActivity(intent_signin); 
       Fblogin(); 
      } 
      else 
      { 
       Toast.makeText(myContext,"no internet connection",Toast.LENGTH_SHORT).show(); 
      } 

     } else if (v.getId() == R.id.Gplus_btn) 
     { 

      if(Network.isNetworkAvailable(myContext)) { 
       //Intent intent_signin = new Intent(myContext, HomeActivity.class); 
       // startActivity(intent_signin); 
       onSignInClicked(); 
       Log.d("ajflow","onclick"); 

      } 
      else 
      { 
       Toast.makeText(myContext,"no internet connection",Toast.LENGTH_SHORT).show(); 
      } 


     } 

    } 

    private void onSignInClicked() { 
     // User clicked the sign-in button, so begin the sign-in process and automatically 
     // attempt to resolve any errors that occur. 

     mShouldResolve = true; 
     mGoogleApiClient.connect(); 
     Log.d("ajflow", "onsignin click"); 


    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     Log.d("ajflow", "onStart"); 


    } 

    @Override 
    public void onStop() { 
     super.onStop(); 

    } 
    private void Fblogin() 
    { 


     // Set permissions 
     LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile, email, user_birthday,user_friends")); 

     LoginManager.getInstance().registerCallback(callbackmanager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       // App code 
       GraphRequest request = GraphRequest.newMeRequest(
         loginResult.getAccessToken(), 
         new GraphRequest.GraphJSONObjectCallback() { 
          @Override 
          public void onCompleted(JSONObject object, GraphResponse response) { 
           // Application code 
           Log.d("LoginActivity", response.toString()); 
           Log.d("LoginActivity", object.toString()); 
           String jsonresult = String.valueOf(object); 
           System.out.println("JSON Result" + jsonresult); 
           String str_firstname = null, str_id = null; 
           String responseValue = response.toString(); 
           responseValue = responseValue.replace("Response: responseCode: 200,", ""); 
           Log.d("animeshnew", responseValue); 


           try { 
            str_firstname = object.getString("name"); 
            str_id = object.getString("id"); 
            String str_email = object.getString("email"); 
            Intent login = new Intent(myContext, HomeActivity.class); 
            String urlValue = "https://graph.facebook.com/" + str_id + "/picture?width=" + PROFILE_PIC_SIZE + "&height=" + PROFILE_PIC_SIZE; 

            SharedPref.Create_SharePref(myContext, str_firstname, urlValue); 
            LoginManager.getInstance().logOut(); 
            startActivity(login); 
            myContext.finish(); 


           } catch (JSONException e) { 
            e.printStackTrace(); 
            Log.d("animesh123", "aa"); 
           } 


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


      } 

      @Override 
      public void onCancel() { 
       // App code 
       Log.v("LoginActivity", "cancel"); 
      } 

      @Override 
      public void onError(FacebookException exception) { 
       // App code 
       Log.v("LoginActivity", exception.getCause().toString()); 
       Toast.makeText(myContext, exception.getMessage(), Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 
    //to check if the fb user is logged in or not 
    public static boolean isLoggedIn() { 
     AccessToken accessToken = AccessToken.getCurrentAccessToken(); 
     return accessToken != null; 
    } 



    @Override 
    public void onConnected(Bundle bundle) 
    { 
     Log.d("ajflow","onconnected"); 
     getProfileInfo(); 


    } 
    public void getProfileInfo() 
    { 
     mSignInClicked = false; 
     if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) 
     { 
      Log.d("ajflow", "profileinfo"); 
      Toast.makeText(myContext, "User is connected!", Toast.LENGTH_LONG).show(); 
      Person currentPerson = Plus.PeopleApi 
        .getCurrentPerson(mGoogleApiClient); 
      personName = currentPerson.getDisplayName(); 
      String id=currentPerson.getId(); 
      String birthDate=currentPerson.getAboutMe(); 
      String personPhotoUrl = currentPerson.getImage().getUrl(); 
      String personGooglePlusProfile = currentPerson.getUrl(); 
      String email = Plus.AccountApi.getAccountName(mGoogleApiClient); 

      Log.d("sachin", "Name: " + personName + " " + currentPerson.getName() + ", plusProfile: " 
        + personGooglePlusProfile + ", email: " + email 
        + ",BirthDay:" + birthDate + ",Id :"+id+", Image: " + personPhotoUrl); 
      personPhotoUrl = personPhotoUrl.substring(0, 
        personPhotoUrl.length() - 2) 
        + PROFILE_PIC_SIZE; 

      Intent login=new Intent(myContext,HomeActivity.class); 
      SharedPref.Create_SharePref(myContext,personName, personPhotoUrl); 
      signOutFromGplus(); 
      startActivity(login); 
      myContext.finish(); 


     } 
     else 
     { 
      Toast.makeText(myContext,"Problem in connection",Toast.LENGTH_SHORT); 
     } 
    } 

    @Override 
    public void onConnectionSuspended(int i) 
    { 
     mGoogleApiClient.connect(); 
    } 





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

     super.onActivityResult(requestCode, resultCode, data); 
     if(callbackmanager!=null){ 
      callbackmanager.onActivityResult(requestCode,resultCode,data); 
     } 
     Log.d("ani", "onActivityResult:" + requestCode + ":" + resultCode + ":" + data); 
     Log.d("ajflow","onactivityresult"); 

      if (requestCode == RC_SIGN_IN) { 
      // If the error resolution was not successful we should not resolve further. 
      if (resultCode != getActivity().RESULT_OK) { 
       mShouldResolve = false; 
      } 

      mIsResolving = false; 
      mGoogleApiClient.connect(); 
     } 

    } 

    @Override 
    public void onConnectionFailed(ConnectionResult connectionResult) 
    { 
     Log.d("ajflow","onconnectionfailed"); 
     // Could not connect to Google Play Services. The user needs to select an account, 
     // grant permissions or resolve an error in order to sign in. Refer to the javadoc for 
     // ConnectionResult to see possible error codes. 
     Log.d("ani", "onConnectionFailed:" + connectionResult); 

     if (!mIsResolving && mShouldResolve) 
     { 
      Log.d("ajflow","both false true"); 
      if (connectionResult.hasResolution()) { 
       mSignInClicked = false; 
       try { 
         Log.d("ajflow","has resolution"); 

        connectionResult.startResolutionForResult(getActivity(), RC_SIGN_IN); 
        Log.d("ajflow", "try over"); 
        mIsResolving = true; 
       } catch (IntentSender.SendIntentException e) { 
        Log.e("ani", "Could not resolve ConnectionResult.", e); 
        mIsResolving = false; 
        Log.d("ajflow","in catch"); 

        mGoogleApiClient.connect(); 

       } 
      } 
     } 


    } 
    /** 
    * Sign-out from google 
    * */ 
    static void signOutFromGplus() { 
     Log.d("ajflow","signout"); 
     if (mGoogleApiClient.isConnected()) { 
      Plus.AccountApi.clearDefaultAccount(mGoogleApiClient); 
      mGoogleApiClient.disconnect(); 



     } 

    } 

    public void signInVolley() 
    { 
     mQueue = CustomVolleyRequestQueue.getInstance(getActivity().getApplicationContext()) 
       .getRequestQueue(); 
     JSONObject params = new JSONObject(); 
     try { 

      params.put("email_id", email.getText().toString()); 
      params.put("password",password.getText().toString()); 


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

     final CustomJSONObjectRequest jsonRequest=new CustomJSONObjectRequest(Request.Method.POST, ApiClass.SignIn_URL,params, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       Log.d("aniloginsignin", response + ""); 
       try { 

        String successValue=response.getString("success"); 
        Log.d("anisuccess",successValue); 
        Log.d("anilogin",successValue); 
        if(successValue.equals("1")) 
        { 
         JSONObject data=response.getJSONObject("data"); 
         String name=data.getString("user_name"); 
         Log.d("aniloginname",name); 
         Intent login = new Intent(getActivity(), HomeActivity.class); 
         SharedPref.Create_SharePref(getActivity(), name, ""); 
         startActivity(login); 
         getActivity().finish(); 
        } 
        else if(successValue.equals("0")) 
        { 
         Toast.makeText(myContext,"Invalid Email ID or Password",Toast.LENGTH_SHORT).show(); 
        } 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     },new Response.ErrorListener() 
     { 
      @Override 
      public void onErrorResponse(VolleyError error) 
      { 
       Toast.makeText(getActivity(),"no internet connection",Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     mQueue.add(jsonRequest); 
    } 


} 
+0

есть проблема в ключе вашего Google плюс счета – theLazyFinder

+0

@bpA: -ошибка в Ключ не позволяет подключаться. right ?, но здесь я получаю соединение после второго щелчка в любом случае –

ответ

1

Try ниже код для onConnectionFailed:

@Override 
    public void onConnectionFailed(ConnectionResult connectionResult) 
    { 
Log.e(LOG_TAG, connectionResult.toString()); 
      //If connectionResult does not have resolution 
      if(!connectionResult.hasResolution()){ 
       if (GoogleApiAvailability.getInstance().isUserResolvableError(connectionResult.getErrorCode())){ 
        Dialog dialog = GoogleApiAvailability.getInstance().getErrorDialog(MainActivity.this, errorcode, REQUEST_CONSENT); 
      dialog.show(); 
        return; 
       } 

      } 
      if(!mIsResolving){ 
        // The failure has a resolution. Resolve it. 
        // Called typically when the app is not yet authorized, and an 
        // authorization dialog is displayed to the user. 
        Log.d(LOG_TAG, "Attempting to Resolve Failed Connection"); 
        mIsResolving = true; 
        try { 
       connectionResult.startResolutionForResult(MainActivity.this, REQUEST_OAUTH); 
      } catch (IntentSender.SendIntentException e) { 
       Log.e(LOG_TAG,"Exception while starting Resolution Activity: "+e); 
       e.printStackTrace(); 
      } 
      } 
     } 

В вашем onActivityResult, получить результат:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == REQUEST_OAUTH){ 
      mIsResolving = false; 
      if (resultCode == RESULT_OK){ 
       if (mGoogleApiClient != null && !mGoogleApiClient.isConnecting() && !mGoogleApiClient.isConnected()){ 

        mGoogleApiClient.connect(); 
       } 
      }else { 
       Log.d(LOG_TAG,"Result Code not OK"); 
      } 
     }else { 
      Log.d(LOG_TAG, "Request Code didn't match"); 
     } 
    } 
+0

@ Namrata. Тем не менее, мне нужно дважды щелкнуть для входа. Так как я получаю n ошибки в лог-коте, как показано ниже. E/ани: ConnectionResult {StatusCode = SIGN_IN_REQUIRED, разрешение = PendingIntent {3071f27f: [email protected]}} и состояние журнал Мента слишком D/ани: Попытка Resolve Failed Connection –

+0

Проверьте отредактированный answer: В onActvityResult make mIsResolving = false, а не authInProgress = false –

+0

@ Namrata - все та же самая вещь. Сообщения об ошибках тоже –