【问题标题】:iOS app communicate with Laravel webappiOS 应用与 Laravel webapp 通信
【发布时间】:2014-09-09 14:34:52
【问题描述】:

我正在开发一个基于 iOS 应用(本机)的项目,该应用使用 web 应用(Laravel 框架)进行通信。 例如,ios 用户应使用 Laravel 登录来使用应用程序。 项目的 laravel 部分已完成并且在计算机上运行良好(登录、注册等……) 但现在我正在考虑如何使用 laravel 框架与我的 futur ios App 和我的 webapp 进行通信。我不知道有什么方法可以做到这一点,也许我需要在我的 ios 应用程序上安装一个特殊的框架?

我不知道,你能帮帮我吗?

提前致谢

【问题讨论】:

  • 正常方式——创建一个json api供你的应用使用
  • 但是如何将 json 内容从 ios 发送到 laravel api?
  • 不是 Objective-C 的粉丝,但基本上你只会发出一个标准的 http post/get 请求。 IOS 发布请求的谷歌带来了大量的例子

标签: php ios objective-c laravel


【解决方案1】:

这是一个加载的问题.... 我个人的偏好是设置一组 API 控制器,以便您可以独立控制它们并对其进行版本控制。

1) 创建控制器子集@/app/controllers/api/v1
2)给他们一个api/v1的命名空间

<?php namespace api\v1;

3) 将您需要的任何类导入新的命名空间

<?php namespace api\v1;

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

4) 安装oAuth2 package
5) 设置生成和验证令牌的路由,并将受保护的路由放在路由组中。 (下面是我的例子。)

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) 设置您的新 api 控制器以移动应用可以使用 (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);

}

【讨论】:

  • 感谢您的完整回答!但我做了一个没有 oAuth2 包的简单 API 控制器。如果登录正常并且运行良好,我的控制器目前只会返回 true 或 false。
【解决方案2】:

感谢您的完整回答!但我做了一个没有 oAuth2 包的简单 API 控制器。如果登录正常并且运行良好,我的控制器目前只会返回 true 或 false。这是我给其他人的代码......

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'));
            }    
}

这里是我的 api 路由

Route::resource('api/v1', 'ApiController');
Route::get('api/v1_hello', 'ApiController@sayhello');
Route::get('api/v1_login', 'ApiController@trylogin') 

您如何看待安全管理?我可以在 ios 上进行自己的令牌系统验证吗?

编辑

我终于找到了解决方案,这里是我的 ApiController 中的函数: 您只需将 Facebook 或 Google connexion 生成的令牌从 iOS 发送到您的 api。在我的例子中添加一个网络参数。

 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';

    }




}

【讨论】:

  • 如何在 Laravel 中使用 oauth2 包?文档不清楚。你能帮帮我吗?
  • 使用这个:github.com/artdarek/oauth-4-laravel如果您有任何问题,请创建帖子!
  • 我需要实现自己的 oauth 服务不消费!
  • @KbirMhrjn 我知道这是旧评论,但对于那些登陆这里的人,我认为需要检查这个以创建服务:laravel.com/docs/5.4/passport
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
相关资源
最近更新 更多