Bonjour,
Voilà je suis un développeur complètement amateur, je code sur mon loisir essentiellement des sortes de "web-appli". Langage serveur PHP, et en front HTML+CSS+Javascript. J'essaye d’éviter au maximum le recours au jQuery et de code en plain javascript depuis cette année.
J'aimerais "porter" l'un de mes projets sur Android, dans un cadre "webview". J'ai donc téléchargé Android Studio, et commencé le travail. L'idée est d'avoir un maximum de fichiers en local (le html, css, javascript, les images etc.) et d'avoir les fichiers de communication avec le serveur (php) sur le serveur en lui-même (évidemment).
Grossomodo, il s'agit d'une "application" permettant une aide de jeu pour un wargame sur table et qui requiert une inscription/connexion de l'utilisateur afin d'accéder à ses parties sauvegardées. Toutes ces données utilisateurs / parties sont évidemment stockées dans une base sql sur le serveur.
Malheureusement, après compilation de l'apk, l'affichage de la page de connexion se fait correctement, j'y rentre mes identifiants, et lorsque je tente de me connecter il ne se passe strictement rien. (Il va sans dire que cela fonctionne parfaitement si l'appli est intégralement sur le serveur et que l'on s'en sert avec un PC).
Voici quelques éléments de code qui illustrent ce que fait l'application:
Arbre (à noter que tous les fichiers html, css, js, images et autres sont placées dans assets)
Manifest:
Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mma.wifcompaniontest" > <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenSize"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
MainActivity:
Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 package com.example.mma.wifcompaniontest; import android.annotation.TargetApi; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.webkit.WebView; public class MainActivity extends AppCompatActivity { private WebView m_webview = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Load layout setContentView(R.layout.activity_main); // Create WebView m_webview = new WebView(this); // Add WebView to Activity m_webview = (WebView) findViewById(R.id.webviewWIF); m_webview.loadUrl("file:///android_asset/wifmobile.html"); // Reload the old WebView content if (savedInstanceState != null) { m_webview.restoreState(savedInstanceState); } // Create the WebView else { m_webview.getSettings().setJavaScriptEnabled(true); int currentapiVersion = android.os.Build.VERSION.SDK_INT; if (currentapiVersion >= android.os.Build.VERSION_CODES.JELLY_BEAN){ fixNewAndroid(m_webview); } } } // Save the state of the web view when the screen is rotated. @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); m_webview.saveState(outState); } @TargetApi(16) protected void fixNewAndroid(WebView webView) { try { webView.getSettings().setAllowUniversalAccessFromFileURLs(true); } catch(NullPointerException e) { } } }
Exemple de code javascript accédant au php pour la connexion utilisateur:
Code Javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 var WIF_url='http://mysite.com'; function NewSignIn() { document.getElementById('overlayload').style.display='block'; // Get the values var loginusername = document.getElementById('login-username').value; var loginpassword = document.getElementById('login-password').value; // Send the data using post var xhr2 = new XMLHttpRequest(); xhr2.open('POST', WIF_url+'ajax_newsignin.php'); xhr2.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr2.onload = function() { var data=parseInt(xhr2.responseText) || 0; if (xhr2.status === 200) { document.getElementById('overlayload').style.display='none'; if (data > 0) { PopupSave('Welcome <span style="font-weight:bold;color:orange;">' + loginusername + '</span>!') WIF_currentusername = loginusername; WIF_currentiduser = data; //show the game create / new game page document.getElementById('signin').style.display='none'; document.getElementById('gamenewload').style.removeProperty('display'); document.getElementById('logoutgeneral').style.removeProperty('display'); document.getElementById('AutoBuildYesNo').checked=false; document.getElementById('AutoDiploYesNo').checked=false; document.getElementById('AutoScrapYesNo').checked=false; var opt0=document.getElementById('opt0'); var opt0parent=opt0.parentNode; opt0parent.parentNode.removeChild(opt0parent); HideClass('debug'); } else { PopupSave('Unknown user, you should register first!'); } } else if (xhr2.status !== 200) { PopupSave(xhr2.responseText); } }; var params=prepareAjaxPostData({ loginusername: loginusername, loginpassword: loginpassword }); xhr2.send(params); return false; }
Et enfin, un exemple de fichier php:
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 <?php header('Access-Control-Allow-Origin: *'); include_once('db_connect.php'); // ======================================= // Connexion d'un utilisateur // ======================================= $username=addslashes(htmlspecialchars($_POST['loginusername'])); $password=htmlspecialchars($_POST['loginpassword']); // Vérification de l'utilisateur / mot de passe $requestuser="SELECT iduser,password FROM wifusers WHERE username='$username'"; $query=$lotr->query($requestuser); $array=$query->fetch(); $passwordcheck=$array['password']; $iduser=$array['iduser']; //if(password_verify($password,$passwordcheck)){ if($password==$passwordcheck){ echo $iduser; } else{ echo 0; } $query->closeCursor(); $lotr = null; unset($lotr); ?> <?php header('Access-Control-Allow-Origin: *'); include_once('db_connect.php'); $scenario=htmlspecialchars(addslashes($_POST['scenario'])); $admin=(int)$_POST['admin']; $wiforfal=(int)$_POST['wiforfal']; $adminname=htmlspecialchars(addslashes($_POST['adminname'])); // ======================================= // CREATE GAME AND LOAD XML DATABASE // ======================================= //Création du game $sql="INSERT INTO wifgames (xmlsave,admin,adminname,lastsaved,scenario,wiforfal) VALUES ('', $admin,'$adminname','".date("Y-m-d H:i:s")."','$scenario',$wiforfal)"; $lotr->exec($sql); $idgame=$lotr->lastInsertId(); echo $idgame; $lotr = null; unset($lotr); ?>
Merci d'avance pour vos précieux conseils!
-- Mathieu
Partager