2014-09-09 2 views
1

Je travaille sur un projet basé sur une application iOS (native) qui utilise une application web (Laravel framework) pour communiquer. Par exemple, l'utilisateur ios doit utiliser Laravel login pour utiliser l'application. La partie laravel du projet est fait et fonctionne bien sur un ordinateur (login, registre etc ...) Mais maintenant je pense comment vais-je communiquer avec mon futur ios App et ma webapp en utilisant larvar framework. Je ne connais aucun moyen de le faire, peut-être que j'ai besoin d'un encadrement spécial sur mon application ios?Application iOS communiquer avec Laravel webapp

Je ne sais pas, pouvez-vous m'aider?

Merci à l'avance

+0

La façon normale - créer un api JSON pour votre application à consommer – Steve

+0

mais comment envoyer du contenu JSON de ios à l'api Laravel? – Jeffrey

+0

Ce n'est pas un fan d'Objective-C, mais vous allez simplement faire une requête http post/get standard. Un google pour la demande de publication IOS amène beaucoup d'exemples – Steve

Répondre

1

Ceci est une question chargée .... Ma préférence personnelle est de mettre en place un ensemble de contrôleurs API afin que vous puissiez les contrôler de manière indépendante et la version eux.

1) Créer un sous-ensemble de contrôleurs @/app/controllers/api/v1
2) Donnez-leur tout un espace de noms de api/v1

<?php namespace api\v1; 

3) Importation quelle que soit les classes dont vous avez besoin dans le nouvel espace de noms

<?php namespace api\v1; 

use Illuminate\Support\Facades\Input; 
use Illuminate\Support\Facades\Response; 
use Usage; 
use Auth; 

4) Installer un oAuth2 package
5) Configurer des routes qui génèrent et valident des jetons et placent vos routes protégées dans une route gr oup (Mon exemple ci-dessous.)

Route::group(['prefix' => 'api/v1', 'before' => 'apiErrors'], function() 
{ 

    Route::post('accessToken', function() 
    { 

     return AuthorizationServer::performAccessTokenFlow(); 

    }); 

    Route::group(['before' => 'oauth|setUser'], function() 
    { 

     Route::resource('usages', 'api\v1\UsagesController'); 
     Route::resource('connections', 'api\v1\ConnectionsController'); 
     Route::resource('users', 'api\v1\UsersController'); 

    }); 

}); 

6) Mettre en place de nouveaux contrôleurs api pour renvoyer des données d'une manière qu'une application mobile peut utiliser (JSON)

public function index() 
{ 

    $usages = Usage::with('device.model.manufacturer') 
        ->where('user_id', Auth::user()->id) 
        ->get(); 

    return Response::json($usages, $this->responseCode, $this->accessControl); 

} 
+0

merci pour votre réponse complète! mais j'ai fait un simple contrôleur API sans paquet oAuth2. Mon contrôleur pour le moment renvoie juste vrai ou faux si la connexion est correcte et cela fonctionne bien. – Jeffrey

0

merci pour votre réponse complète! mais j'ai fait un simple contrôleur API sans paquet oAuth2. Mon contrôleur pour le moment renvoie juste vrai ou faux si la connexion est correcte et cela fonctionne bien. ici mon code pour les autres ...

public function trylogin() { 


     if (Auth::attempt(array('email'=>Input::get('email'), 'password'=>Input::get('password'))) || Auth::attempt(array('username'=>Input::get('username'), 'password'=>Input::get('password')))) { 
      return Response::json(array('status' => 'OK')); 
     } else { 
      return Response::json(array('status' => 'FAIL')); 
      }  
} 

ici mes itinéraires api

Route::resource('api/v1', 'ApiController'); 
Route::get('api/v1_hello', '[email protected]'); 
Route::get('api/v1_login', '[email protected]') 

que pensez-vous de la sécurité managment? je peux faire ma propre validation du système de jetons sur ios?

EDIT

j'ai finalement trouvé une solution, ici de la fonction dans mon ApiController: il vous suffit d'envoyer à votre api de iOS générer le jeton par Facebook ou Google connexion. et dans mon cas, ajoutez un paramètre réseau.

public function registerOrLoginFromSocialNetWorkV1(){  

    if (Input::get('email') && Input::get('sn_id')) { 
     //sn = social network 
     if (User::where('email','=', Input::get('email'))->count() != 0) { 
      $user = User::where('email','=', Input::get('email'))->first(); 
      $user->fb_id = Input::get('sn_id'); 
      $user->save(); 
       //return 'email already used'; 

     } 
     else{ 

      if (User::where('fb_id','=', Input::get('sn_id'))->count() == 0) { 
       $user = new User; 
       $user->firstname = Input::get('firstname'); 
       $user->lastname = Input::get('lastname'); 
       $user->username = Input::get('username'); 
       $user->email = Input::get('email'); 
       $user->fb_id = Input::get('sn_id'); 
       $user->fk_role = 3; 
       $user->yearofbirth = Input::get('birthday'); 

       //$user->yearofbirth = substr($me['birthday'],6,9); 

       if (Input::get('sex') == 'male') { 
        $user->sex = 1; 
       } 
       else{ 
        $user->sex = 0; 
       } 


       $user->save(); 

       Userslog::log('api_register_social_network'); 

      } 
      else{ 
       $user = User::where('fb_id','=', Input::get('sn_id'))->first(); 
       if (!$user->yearofbirth){ 
        $user->yearofbirth = Input::get('birthday'); 
        $user->save(); 

       } 

      } 

     } 

      //dd($user); 
      Auth::login($user); 




      $follows = Follow::where('user_id','=',$user->id)->get(); 

      return Response::json(array('user' => $user,'follows' => $follows)); 
    } 
    else{ 
     return 'error'; 

    } 




} 
+0

Comment puis-je utiliser le paquet oauth2 dans Laravel? Le document n'est pas clair. Pouvez-vous m'aider ici? –

+0

utilisez ceci: https: // github.com/artdarek/oauth-4-laravel si vous avez une question, créez un post! – Jeffrey

+0

J'ai besoin de mettre en œuvre mon propre service oauth ne pas consommer! –

Questions connexes