2016-03-27 18 views
0

Parse.com hizmetini kullanan uygulamamdaki bazı çok basit (düşündüğüm gibi) işlevselliği sağlamaya çalışıyorum. İhtiyacım olan şey, kullanıcıların Facebook üzerinden bir hesap oluşturmasına ve Facebook üzerinden tekrar giriş yapmasına izin vermektir.PFFacebookUtils. Giriş ve kayıt arasındaki fark nasıl yapılır?

sorun PFFacebookUtils giriş yöntemleri sadece Facebook üzerinden kullanıcılara giriş değil, aynı zamanda yeni bir PFUser oluşturmaktır. Neden benim için bir problem? Tabii ki. Kaydolma ve isNew alanı arasında ayrım yapabilirim, ancak gerçekten yardımcı olmuyor.

Aşağıdakileri göz önünde bulundurun - kullanıcı Facebook üzerinden giriş yapmaya çalışır (PFUser henüz yoktur), giriş yapar, yeni bir kullanıcı oluşturulur. Kullanıcının yeni olduğunu görüyorum (yani kullanıcı daha önce kayıt olmadı) ve bu girişi reddetmeliyim. Tamam, onu reddettim, "Henüz kayıt olmadı, git ve kayıt ol" diyorum. Kullanıcı (aynı oturum açma yöntemi ile) kaydolur ve bu kez aynı kullanıcı oturum açmaya çalıştığında oluşturulan aynı PFUser döndürülür. Kullanıcı yeni değil, zaten kayıtlı olduğunu görüyorum ve bu yüzden reddetmek zorundayım Kullanıcı zaten var çünkü hesap zaten var ve aynı hesabı tekrar oluşturmak imkansız.

Problemi anlıyor musunuz? Ben PFFacebookUtils hesap oluşturma ve oturum açma ile başa çıkmak için nasıl anlayamıyorum ya da bir aptalca API sağlayan PFFacebookUtils olduğunu aptal olmak mı? Siz bunu nasıl yapıyorsunuz? Tanımladığım sorunu nasıl çözersiniz? Gerçekten, çok basit olmalı ama iyi bir örnek bulamıyorum.

cevap

1

Oturum açma ve kayıt kodları, kullanıcının giriş ve kayıtta yeni olup olmadığını kontrol eden hızlı bir şekilde giriş ve kayıt kodlarım var. İşte benim kodudur:

GİRİŞ

let spinningActivity = MBProgressHUD.showHUDAddedTo(self.view, animated: true) 
    spinningActivity.label.text = "Just a Moment" 
    spinningActivity.detailsLabel.text = "Logging in" 

    if reachabilityStatus == kNOTREACHABLE { 

     spinningActivity.hideAnimated(true) 

     self.displayError("No Internet Connection", message: "Please connect to the internet before continuing") 

    } else { 

     let permissions = ["public_profile"] 

     PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions) { (user:PFUser?, error:NSError?) -> Void in 



      if error != nil { 

       spinningActivity.hideAnimated(true) 

       self.displayError("Error", message: error!.localizedDescription) 

      } else if let user = user { 
       if user.isNew { 

        spinningActivity.hideAnimated(true) 

        PFUser.currentUser()?.deleteInBackground() 

        self.displayNoticeWithTwoActions("Account Not Found", message: "This Facebook account is not in our system. You have to sign up first.", firstButtonTitle: "Sign Up",closeButtonTitle: "Ok", segue: "dontHaveAccountSegue") 

       } else { 

        spinningActivity.hideAnimated(true) 

        self.performSegueWithIdentifier("successfulLoginSegue", sender: self) 



       } 
      } else { 

       PFUser.currentUser()?.deleteInBackground() 

       spinningActivity.hideAnimated(true) 

       self.displayError("Error", message: "Unless you tapped on 'Cancel' or 'Done', something went wrong. Please try again.") 

      } 

     } 

    } 

SIGNUP

Sonra bir kayıt düğmesi ve "loadFacebookUserDetails" denilen giriş butonu içine uygulanan bir işlev var

let spinningActivity = MBProgressHUD.showHUDAddedTo(self.view, animated: true) 
    spinningActivity.label.text = "Just a Moment" 
    spinningActivity.detailsLabel.text = "Loading Details" 


    if reachabilityStatus == kNOTREACHABLE { 

     spinningActivity.hideAnimated(true) 

     self.displayError("No Internet Connection", message: "Please connect to the internet before continuing") 

    } else { 

     let permissions = ["public_profile", "email"] 

     PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions) { (user:PFUser?, error:NSError?) -> Void in 

      if let user = user { 

       if !user.isNew { 

        spinningActivity.hideAnimated(true) 

        PFUser.logOut() 


        self.displayNoticeWithTwoActions("Account Found", message: "This Facebook account already in our system. You have to log in first.", firstButtonTitle: "Log In", closeButtonTitle: "Cancel", segue: "haveAccountSegue") 



       } else if error != nil { 

        spinningActivity.hideAnimated(true) 

        self.displayError("Error", message: error!.localizedDescription) 



       } else if error == nil { 

        spinningActivity.hideAnimated(true) 

        self.loadFacebookUserDetails() 

       } 

      } 

     else { 

       spinningActivity.hideAnimated(true) 

       self.displayError("Something Went Wrong", message: "Unless you tapped on 'Cancel' or 'Done', something went wrong. Please try again") 

      } 



     } 


    } 
Eğer objektif c dönüşüm ile sorun yaşıyorsanız 10
func loadFacebookUserDetails() { 

    let spinningActivity = MBProgressHUD.showHUDAddedTo(self.view, animated: true) 
    spinningActivity.mode = MBProgressHUDMode.AnnularDeterminate 
    spinningActivity.label.text = "Just a Moment" 
    spinningActivity.detailsLabel.text = "Loading Details" 

    let requestPerameters = ["fields": "id, email, first_name, last_name, name"] 

    let userDetails = FBSDKGraphRequest(graphPath: "me", parameters: requestPerameters) 

    userDetails.startWithCompletionHandler { (connection, result, error:NSError!) -> Void in 

     if error != nil { 

      spinningActivity.hideAnimated(true) 

      self.displayError("Error", message: error!.localizedDescription) 

      PFUser.logOut() 

     } else { 

     let userID:String = result["id"] as! String 
     let userEmail:String = result["email"] as! String 
     let userFirstName:String = result["first_name"] as! String 
     let userLastName:String = result["last_name"] as! String 


     // Get Facebook Profile Picture 

     let userProfile = "https://graph.facebook.com/" + userID + "/picture?type=large" 

     let usernameLink = "https://graph.facebook.com/" + userID 

     let username = usernameLink.stringByReplacingOccurrencesOfString("https://graph.facebook.com/", withString: "") 

     let profilePictureUrl = NSURL(string: userProfile) 

     let profilePictureData = NSData(contentsOfURL: profilePictureUrl!) 

     if profilePictureData != nil { 

      let profilePictureObject = PFFile(data: profilePictureData!) 
      PFUser.currentUser()?.setObject(profilePictureObject!, forKey: "profile_picture") 

     } 

     PFUser.currentUser()?.setObject(userFirstName, forKey: "first_name") 
     PFUser.currentUser()?.setObject(userLastName, forKey: "last_name") 
     PFUser.currentUser()?.setObject(username, forKey: "facebook_link") 

     if userEmail == userEmail { 

      PFUser.currentUser()?.email = userEmail 

     } 

     PFUser.currentUser()?.saveInBackgroundWithBlock({ (success:Bool, error:NSError?) -> Void in 

      if error != nil { 

       spinningActivity.hideAnimated(true) 

       self.displayError("Error", message: error!.localizedDescription) 

       PFUser.logOut() 

      } else if success == true { 

       if !userID.isEmpty { 

        spinningActivity.hideAnimated(true) 

       NSUserDefaults.standardUserDefaults().setObject("authData", forKey: "facebookAuth") 

        NSUserDefaults.standardUserDefaults().synchronize() 

        self.performSegueWithIdentifier("facebookUserDetailsSegue", sender: self) 



       } 

      } else { 

       spinningActivity.hideAnimated(true) 

       self.displayError("Something Went Wrong", message: "Please try again") 

       PFUser.logOut() 

      } 

     }) 

    } 

} 

} 

, sana bunun nasıl YouTube videolarını bulabilirsiniz bahis.