2017-07-17 1 views
0

J'ai récemment migré mon application depuis Parse Server vers mon propre serveur personnalisé. J'essaye de trouver un moyen d'accéder au jeton de session sans avoir importé Parse SDK sur mon projet. J'ai besoin du jeton de session, donc je n'ai pas besoin de ré-authentifier mes utilisateurs connectés.Obtention du jeton de session du serveur d'analyse directement sur iOS Swift

Jusqu'à présent, je y accéder avec les méthodes suivantes, qui oblige à importer Parse sdk:

 PFUser.current()?.saveInBackground(block: { [weak self] (success, error) in 
      if let error = error { 
       Log.error?.message(error.localizedDescription) 
       return 
      } 
      guard let sessionToken = PFUser.current()?.sessionToken else { 
       Log.error?.message("Did not get session token even after saving user") 
       return 
      } 
     }) 

L'autre solution que je cherchais à est le répertoire des documents privés de Parse, mais je ne pouvais obtenir applicationId, InstallationID et config à partir de là:

class ParseHelper {  
    var parsePrivateDocumentsDirectory: URL? { 
     let filemanager = FileManager.default 
     guard let libraryDirectory = filemanager.urls(for: .libraryDirectory, in: .userDomainMask).last else { 
      return nil 
     } 

     guard let parseDirectory = URL(string: "Private%20Documents/Parse/", relativeTo: libraryDirectory) else { 
      return nil 
     } 
     return parseDirectory 
    } 

    func parseFile(_ filename: String) -> URL? { 
     let filemanager = FileManager.default 
     guard let parseDirectory = self.parsePrivateDocumentsDirectory else { 
      return nil 
     } 

     guard let installationIdUrl = URL(string: filename, relativeTo: parseDirectory) else { 
      return nil 
     } 

     if filemanager.fileExists(atPath: installationIdUrl.path) { 
      return installationIdUrl 
     } else { 
      return nil 
     } 
    } 

    var installationId: String? { 
     guard let fileURL = self.parseFile("installationId"), let data = try? Data(contentsOf: fileURL) else { 
      return nil 
     } 
     let string = String(data: data, encoding: String.Encoding.utf8) 
     return string 
    } 

    var applicationId: String? { 
     guard let fileURL = self.parseFile("applicationId"), let data = try? Data(contentsOf: fileURL) else { 
      return nil 
     } 
     let string = String(data: data, encoding: String.Encoding.utf8) 
     return string 
    } 

    var config: String? { 
     guard let fileURL = self.parseFile("config"), let data = try? Data(contentsOf: fileURL) else { 
      return nil 
     } 
     let string = String(data: data, encoding: String.Encoding.utf8) 
     return string 
    } 
} 

Répondre

1

Les seuls fichiers disponibles en Private Documents/Parse sont:

  • applicationID
  • currentInstallation
  • currentUser
  • InstallationID

Le sessionToken d'autre part, est stocké dans le porte-clé. La clé doit être $APP_BUNDLE_ID.com.parse.sdk (Official info et source code, et here's la source de la fonction utilisée pour enregistrer les données).

Si vous rencontrez un problème, un problème here's le repo officiel sur la migration des serveurs et des sessions