Webview erweitern um Textfeld bei appstart

  • Antworten:4
Marco_
  • Forum-Beiträge: 3

04.06.2014, 13:27:34 via Website

Hallo Community,

Ich bin mir nicht sicher, ob ich mit dem Beitrag im Tutorial richtig bin. Ich könnte mir aber vorstellen, dass die Antwort auf meine Frage einem Tutorial gleich kommt, daher poste ich hier.

ich stehe aktuell vor folgendem Problem:

Ich habe eine funktionierende App mit Webview programmiert. Die App zeigt aktuell eine Webseite an, die auf meinem lokalen Apache liegt. Die Seite auf einen Webspace zu kopieren und die app anzupassen ist auch kein Problem.

Was ich jetzt allerdings möchte ist, dass vor appstart und Aufruf des Webviews ein Prompt (Textfeld mit Button) erscheint. Darin soll der Nutzer einen Zugangscode eintragen.

Dieser Zugangscode möchte ich in einer lokalen Datenbank der app speichern.

Wenn der Zugangscode eingegeben wurde und gültig ist erscheint der Webview.

Bei zukünftigen Appstarts soll zuerst geprüft werden, ob in der lokalen Datenbank der App bereits ein Zugangscode eingetragen ist. Wenn ja, wird der Nutzer direkt an den Webview weitergeleitet, wenn nein, kommt eben das Prompt.

Ich habe zwar ein paar Programmierkenntnisse, steige aber in der Logik der Android-Programmierung noch nicht ganz durch. Ich erwarte hier keinen fertigen Programmcode, aber wenigstens eine Richtung, wie ich das ganze angehen müsste.

Hier kurz zusammengefasst, wie ich mir die App vorstelle und anschließend der aktuelle Programmcode:

App-Start
\/
Prüfung Datenbank ob Zugangscode eingetragen
\/ ja               \/ nein
\/                  Eingabefeld für Zugangscode
\/                  \/
\/                  Zugangscode in App-Datenbank speichern
\/                  \/
Weiterleitung zu Webview

MainActivity.java

package com.lol.webviewtest.mywebviewapp.mywebviewapp;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;


public class MainActivity extends Activity {

    private WebView mWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mWebView = (WebView) findViewById(R.id.activity_main_webview);

        // Settings
        WebSettings webSettings = mWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setSupportZoom(true);
        webSettings.setUseWideViewPort(true);
        webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);

        mWebView.setHorizontalScrollBarEnabled(false);
        mWebView.setVerticalScrollBarEnabled(false);


        //Load URL
        mWebView.loadUrl("<lokale IP entfernt, wegen Forumsrichtlinie>");
        // Force links and redirects to open in the WebView instead of in a browser
        mWebView.setWebViewClient(new WebViewClient());

    }


}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="<Link entfernt, wegen Forumsrichtlinie>"
    package="com.lol.webviewtest.mywebviewapp.mywebviewapp" >

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar" >
        <activity
            android:name="com.lol.webviewtest.mywebviewapp.mywebviewapp.MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="userLandscape"
            android:configChanges="orientation" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.INTERNET" />
</manifest>

activity_main.xml

<FrameLayout xmlns:android="<Link entfernt, wegen Forumsrichtlinie>"
    xmlns:tools="<Link entfernt, wegen Forumsrichtlinie>"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.lol.webviewtest.mywebviewapp.mywebviewapp.MainActivity"
    tools:ignore="MergeRootFrame" >

    <WebView
        android:id="@+id/activity_main_webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
    />
</FrameLayout>

— geändert am 04.06.2014, 14:23:57

Antworten
Marco_
  • Forum-Beiträge: 3

04.06.2014, 14:18:43 via Website

Ich lese mich natürlich parallel weiter in das Thema ein.

Aktuell bin ich so weit, dass ich versuche in meiner MainActivity bei onCreate zu prüfen ob in SharedPreferences ein code eingetragen ist. Wenn ja geht es weiter zum Webview, wenn nein kommt ein textview mit dem Feld und dem Button.

So ganz hab ich es zwar noch nicht raus, aber ich hoffe mal, dass das die richtigen ansätze sind.

Antworten
Andy N.
  • Forum-Beiträge: 22.375

04.06.2014, 15:16:54 via Website

Hallo und herzlich willkommen bei bei uns im Forum :)

Ich habe deinen Thread mal eben eine Etage höher in unseren Developer-Bereich verschoben, da passt er etwas besser...

Viele Grüße,
Andy


OnePlus 3 (Resurrection Remix 5.8.2)
LG G Watch

Regeln | unsere Mods & Admins

Marco_

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

04.06.2014, 17:50:33 via Website

Hallo,
Ich habe das so gelöst:

//Code meiner MainActivity
 if(!prefs.getString("AuthBenutzer","falsch").equals("")) //prefs ist meine SharedPreferences Handlerklasse ->Wenn die Authentifikation nicht leer ist
    {

      if(!prefs.getString("AuthBenutzer","").contains("ok")) //Und der Benutzer nicht angemeldet ist
        {
          spe1.putString("AuthBenutzer", "notAuthentificated"); //Schreibe in die Prefs, dass User nicht angemeldet ist.
          spe1.commit();
        startActivity(new Intent(this,LoginActivity.class)); //Starte die Login Activity die für Benutzername und Passwort zuständig ist. Aktuelle Activity wird versteckt und kann später nach dem Login wieder gestartet werden
          Toast.makeText(getApplicationContext(),"Benutzer nicht authentifiziert",Toast.LENGTH_LONG).show(); //Zeige eine Meldung an

        }
      }

Dann brauchst du halt die Login Activity die die Login Daten verarbeitet.
Nur für einen Benutzer und PW brauchst du keine extra DB.D a reichen die Shared Preferences. [außer du brauchst viele Einträge]
Aber du solltest das Passwort der App nicht hardcoden sondern mit nem Hast besser https und Hash auf dem Webserver per PP überprüfen lassen.

Wenn der Login erfolgreich ist musst du dann noch an die vorherige Activity weiterleiten.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Marco_
  • Forum-Beiträge: 3

04.06.2014, 18:03:22 via Website

Danke Pascal,

das hilft mir auf jeden Fall weiter. Ich brauche nicht einmal ein Kennwort, sondern werde es so lösen, dass ich den Zugangscode als GET-Variable an die Web-Adresse des Webviews anhänge. So kann ich bequem über die SQL-Datenbank hinter dem Webview steuern, welche Zugriffscodes den Webview sehen können und und gleichzeitig die Aktivitäten mit einem Benutzer hinterlegen.

So kann ich auch selbst steuern, wer Zugriff auf den Webview erhalten soll und gleichzeitig auch jederzeit Benutzer sperren. (Zugangscode in der DB auf inaktiv setzen)

Antworten