2014-10-18 7 views
5

Bu sorunun zaten sorulduğunu biliyorum, ancak herhangi bir çözüm bulamadım. Kullanıcıları Facebook, Twitter ve Google+ kullanarak giriş yapabilen Parse kullanıyorum. Şu an itibariyle sadece Facebook ve Twitter tamamen işlevseldir.Parse üzerinde Google+ ile giriş yap

aşağıdaki şekilde Facebook ve Twitter kullanarak giriş başarmış: Ben ayrıştırma yoluyla Google+ ile bunu başarmak için anlamaya çalışıyorum

private void onLoginButtonClicked() { 
     LoginActivity.this.progressDialog = ProgressDialog.show(
       LoginActivity.this, "", "Logging in...", true); 
     List<String> permissions = Arrays.asList("public_profile", "user_about_me", 
       "user_relationships", "user_birthday", "user_location"); 
     ParseFacebookUtils.logIn(permissions, this, new LogInCallback() { 
      @Override 
      public void done(ParseUser user, ParseException err) { 
       LoginActivity.this.progressDialog.dismiss(); 
       if (user == null) { 
        Log.d(IntegratingFacebookTutorialApplication.TAG, 
          "Uh oh. The user cancelled the Facebook login."); 
       } else if (user.isNew()) { 
        Log.d(IntegratingFacebookTutorialApplication.TAG, 
          "User signed up and logged in through Facebook!"); 
        showUserDetailsActivity(); 

       } else { 
        Log.d(IntegratingFacebookTutorialApplication.TAG, 
          "User logged in through Facebook!"); 
       moodpage();    

       } 
      } 
     }); 
    } 

    private void onTwitterButtonClicked() { 
     ParseTwitterUtils.logIn(this, new LogInCallback() { 
       @Override 
       public void done(ParseUser user, ParseException err) { 
       if (user == null) { 
        Log.d("MyApp", "Uh oh. The user cancelled the Twitter login."); 
       } else if (user.isNew()) { 
        Log.d("MyApp", "User signed up and logged in through Twitter!"); 
        showUserDetailsActivity();   
        } else { 
        Log.d("MyApp", "User logged in through Twitter!"); 
        moodpage();    } 
       } 

      }); 
    } 

. Birisi Parse Rest API'sine bakmamı önerdi, ancak ben buna aşina değilim ve daha fazla rehberliğe ihtiyacım var.

Bazı kişiler bana https://github.com/Glamdring/google-plus-java-api/'u kullanmamı önerdi ve söz veriyor gibi görünüyor, ancak nasıl çalıştığımı bilmiyorum. örneğin

Ben hiçbir açıklamanın takdir edilecektir

googleButton = (Button) findViewById(R.id.twitterButton); 
     googleButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 



       onGoogleButtonClicked(); 
      } 
     }); 

private void onGoogleButtonClicked(); { 
     //what to input here 
    } 

söylüyorlar sağlar.

cevap

4

Parse.com tek destek facebook ve bunun için bulut (parse.com) tarafındaki kullanarak kendi kimlik uygulamak zorunda, + google henüz heyecan fakat

Bu uzun bir süreç bu kadar sabırlı olduğunu

bu adımları izleyin

o bu gerekli fonksiyonları uygulamak için 1) profil bilgilerini google almak

onCreate() google + düğmesine uygulanan OnConnectionFailedListener

@Override 
public void onConnectionFailed(ConnectionResult result) { 
    // TODO Auto-generated method stub 
    if (!result.hasResolution()) { 
     GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(), getActivity(), 
       0).show(); 
     return; 
    } 

    if (!mIntentInProgress) { 
     // Store the ConnectionResult for later usage 
     mConnectionResult = result; 

     if (mSignInClicked) { 
      // The user has already clicked 'sign-in' so we attempt to 
      // resolve all 
      // errors until the user is signed in, or they cancel. 
      resolveSignInError(); 
     } 
    } 
} 

/** 
* Method to resolve any signin errors for google plus 
* */ 
private void resolveSignInError() { 
    if (mConnectionResult.hasResolution()) { 
     try { 
      mIntentInProgress = true; 
      mConnectionResult.startResolutionForResult(getActivity(), RC_SIGN_IN); 
     } catch (SendIntentException e) { 
      mIntentInProgress = false; 
      mGoogleApiClient.connect(); 
     } 
    } 
} 

3) aramanın

mGoogleApiClient = new GoogleApiClient.Builder(getActivity()) 
    .addConnectionCallbacks(this) //lets impement ConnectionCallbacks 
    .addOnConnectionFailedListener(this).addApi(Plus.API) // lets implement OnConnectionFailedListener 
    .addScope(Plus.SCOPE_PLUS_LOGIN).build(); 
    mGoogleApiClient.connect(); 

2) yöntemi koymak

private void loginUsingGoolgePlus() { 
    // TODO Auto-generated method stub 
    if (!mGoogleApiClient.isConnecting()) { 
     mSignInClicked = true; 
     resolveSignInError(); 
    } 

} 

4) yöntemleri tıklayın uygulanan C

@Override 
public void onConnected(Bundle arg0) { 
    // TODO Auto-generated method stub 
    mSignInClicked = false; 
    Toast.makeText(getActivity(), "User is connected!", Toast.LENGTH_LONG).show(); 

    // Get user's information 
    getProfileInformation(); 

} 
@Override 
public void onConnectionSuspended(int arg0) { 
    // TODO Auto-generated method stub 
    mGoogleApiClient.connect(); 

} 

5) onnectionCallbacks bu yöntem bu önemlidir) size profil bilgilerini

/** * Fetching user's information name, email, profile pic * */ private void getProfileInformation() { try { if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) { Person currentPerson = Plus.PeopleApi .getCurrentPerson(mGoogleApiClient); String personName = currentPerson.getDisplayName(); String personPhotoUrl = currentPerson.getImage().getUrl(); String personGooglePlusProfile = currentPerson.getUrl(); final String email = Plus.AccountApi.getAccountName(mGoogleApiClient); Log.e(TAG, "Name: " + personName + ", plusProfile: " + personGooglePlusProfile + ", email: " + email + ", Image: " + personPhotoUrl); // by default the profile url gives 50x50 px image only // we can replace the value with whatever dimension we want by // replacing sz=X personPhotoUrl = personPhotoUrl.substring(0, personPhotoUrl.length() - 2) + PROFILE_PIC_SIZE; new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub googleAuthWithParse(email); } }).start(); } else { Toast.makeText(getActivity(), "Person information is null", Toast.LENGTH_LONG).show(); } } catch (Exception e) { e.printStackTrace(); } } 

verecektir burada
biz bir kodu oluşturması ve bu ve e-posta id kullanarak, senaryoyu diyoruz bulut tarafında accessGoogleUser işlevi (Ayrıştır.accessGoogleUser Eğer giriş ya da ayrıştırma ile bulut kodu
main.js nasıl yüklenir? Kaydolma

protected void googleAuthWithParse(String email) { 
    // TODO Auto-generated method stub 
    String scopes = "oauth2:" + Scopes.PLUS_LOGIN + " "; 
    String googleAuthCode = null; 
    try { 
     googleAuthCode = GoogleAuthUtil.getToken(
       getActivity(),           // Context context 
       email,            // String email 
       scopes,           // String scope 
       null          // Bundle bundle 
     ); 
    } catch (UserRecoverableAuthException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (GoogleAuthException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    //Log.i(TAG, "Authentication Code: " + googleAuthCode); 

    final HashMap<String, Object> params = new HashMap<String, Object>(); 
    params.put("code", googleAuthCode); 
    params.put("email", email); 
    //loads the Cloud function to create a Google user 
    ParseCloud.callFunctionInBackground("accessGoogleUser", params, new FunctionCallback<Object>() { 
     @Override 
     public void done(Object returnObj, ParseException e) { 
      if (e == null) { 
       Log.e("AccessToken", returnObj.toString()); 
       ParseUser.becomeInBackground(returnObj.toString(), new LogInCallback() { 
        public void done(final ParseUser user, ParseException e) { 
         if (user != null && e == null) { 
          showToast("The Google user validated"); 

          if(user.isNew()){ 
            //isNew means firsttime 
          }else{ 

           loginSuccess(); 
          } 
         } else if (e != null) { 
          showToast("There was a problem creating your account."); 
          e.printStackTrace(); 
          mGoogleApiClient.disconnect(); 
         } else 
          showToast("The Google token could not be validated"); 
        } 
       }); 
      } else { 
         if (e != null) { 

          try { 
           JSONObject jsonObject = new JSONObject(e.getMessage()); 
           showToast(jsonObject.getString("message")); 
          } catch (JSONException e1) { 
           // TODO Auto-generated catch block 
           e1.printStackTrace(); 
          } 
          e.printStackTrace(); 
          mGoogleApiClient.disconnect(); 
         } 
      } 
     } 
    }); 
} 

7) yapabileceği bu accessToken kullanarak accessToken verecek - main.js

javascript ama com) (bu bulut kod şey. com bulut

dikkatle okuyun ve Parse.exe indirmek ve here gelen indirildikten sonra

do \ Users \ xxxx

1) cloud 
    - main.js 
2) config 
    ─ global.json 
3) public 
    ─ index.html 

enter image description here

8) ana indirmek takip ederken: Biz dosyaları C'de yaratacak dosyaları aşağıdaki

karşıya nasıl

place parse.exe and ParseConsole.exe in ':\Windows\System32' folder. Then search for Windows PowerShell in the start menu and run it as an administrator. Wait for the prompt in the window (mine was a blue window) to indicate it is in the ':\Windows\System32' folder. Then type '.\ParseConsole.exe' and press enter.

bu. here'dan js ve varsayılan 01 ile değiştirin

Not cloud folder oluşturulan: bu main.js

9 içine istemci kimliği ve gizli eklemeyi unuttuğu yok) Bunu kontrol !!. çözümleme veri tarayıcıda

Require Revocable Sessions should be false -> ayarlar -> Genel

herhangi bir şüphe için sor. yardım için hazırım.

+0

Güzel iş! Mükemmel çalışıyor. Tek sorunum CloudCode'u Rest Api ile kullanmaya çalıştığım zaman. Kullanıcı oluşturulur ve yumruk girişimde oturum belirtecini alırım. Ancak, kullanıcı zaten oluşturulduktan sonra, oturum belirtecini alamıyorum, sadece boş bir yanıt. Bir fikrin neden? –

+1

9. nokta mı yaptın? –

+0

Bunu kaçırdım. Şimdi mükemmel gibi çalışıyor. Çok kishore –