Сохраняйте сообщения на сервер rails из приложения Java / Android с разработанной аутентификацией

1

У меня есть Rails-сервер, и я хочу, чтобы приложение Java и приложение для Android могли взаимодействовать со стандартным эшафотом (new/edit/show/etc), поэтому я могу синхронизировать данные между всеми.

Я нашел это (ссылку), которое показывает основную идею, но не фактический код.

Уловка заключается в том, что пользователь должен войти в систему с помощью программы, поэтому они видят только свои данные, а не мои или ваши!

Пожалуйста, помогите мне в этом.

  • 0
    (а) не используйте XML если нет необходимости. (б) Очевидно, что вам нужно дифференцировать аутентифицированных пользователей. Посмотри на сессии.
Теги:
devise

1 ответ

2
Лучший ответ

JSON будет лучше для приложений для Android. Его легкий, чем XML.

когда вы подключаетесь к серверу. каждый запрос будет выполнять вызов webservice на сервер. вы можете отправить аутентификацию в заголовке в кодировке Base64. поэтому каждый запрос анализируется на сервере, и учетные данные могут быть декодированы и аутентифицированы до обслуживания ответа.

Для идентификации устройства вы можете отправить номер IME устройства. вы можете иметь таблицу для отслеживания устройств, которые регистрируются на вашем сервере.

проверьте этот вопрос для деталей

Для проверки подлинности base64 на стороне клиента с помощью json. я не сделал с xml.

public static JSONObject SendHttpPost(Context context, JSONObject jsonObjSend) {
        mPrefs = AppConfig.getPreferences(context);
        String username = mPrefs.getString("UserName","");
        String password = mPrefs.getString("Password","");
        String host = mPrefs.getString("URL","");
        String port = mPrefs.getString("Port","");
        String url = "http:\\myapp.com\controller\getuser"


    HttpResponse response = null ;


    JSONObject jsonObjRecv =null;
    try {
        String usercredential = Utility.getB64Auth(username, password);
        DefaultHttpClient httpclient = new DefaultHttpClient();

        HttpPost httpPostRequest = new HttpPost(url);
        StringEntity se;
        se = new StringEntity(jsonObjSend.toString());

        // Set HTTP parameters
        httpPostRequest.setEntity(se);
        httpPostRequest.setHeader("Authorization", usercredential);
        httpPostRequest.setHeader("Accept", "application/json");
        httpPostRequest.setHeader("Content-type", "application/json");

        long t = System.currentTimeMillis();
        response = (HttpResponse) httpclient.execute(httpPostRequest);
        Log.i(TAG, "HTTPResponse received in [" + (System.currentTimeMillis()-t) + "ms]");
        //Get hold of the response entity (-> the data):
        HttpEntity entity = response.getEntity();

        if (entity != null) {
            // Read the content stream
            InputStream instream = entity.getContent();
            Header contentEncoding = response.getFirstHeader("Content-Encoding");
            if (contentEncoding != null && contentEncoding.getValue().equalsIgnoreCase("gzip")) {
                instream = new GZIPInputStream(instream);
            }

            // convert content stream to a String
            String resultString= convertStreamToString(instream);
            Log.v(null, "resultString "+resultString);
            instream.close();


            // Transform the String into a JSONObject
            if(resultString!=null){
                jsonObjRecv = new JSONObject(resultString);

            }

            // Raw DEBUG output of our received JSON object:
            Log.i(TAG,"<jsonobject>\n"+jsonObjRecv.toString()+"\n</jsonobject>");

            return jsonObjRecv;
        } 


    } catch(SocketException se){
        se.printStackTrace();


    }catch (ClientProtocolException e)  {

        e.printStackTrace();
    } catch (IOException e) {

        e.printStackTrace();
    } catch (JSONException e) {

        e.printStackTrace();
    }
    return null;
}

Изменить да, имя пользователя и пароль установлены. используйте экран, подобный экрану предпочтений, чтобы установить его. может ссылаться на json.org для синтаксического анализа и создания json. да может создавать вложенные jsons.

JSONObject body = new JSONObject();
JSONObject note = new JSONObject();
    JSONObject commit = new JSONObject();
     note.put("value", test2);
     commit.put("create", note);
     body.put("note", note);
     body.put("commit", commit);
  • 0
    имя пользователя + пароль будет .. придумать? предварительно установить? ?
  • 0
    Как добавить вложенные элементы в JSONobject, например: "note" => {"value" => "test 2"}, "commit" => "Create Note"}?
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню