2016-08-21 23 views
17

Udało mi się wdrożyć serwer phpMyAdmin na Google Cloud, postępując zgodnie z tym link. Mam problem z zapisaniem do bazy danych, którą utworzyłem w phpMyAdmin. Próbuję utworzyć usługę powiadomień na podstawie nowej wersji Firebase Cloud Messaging opublikowanej przez Google.Wysyłanie połączenia REST do serwera Google Cloud PHPMyAdmin nie działa?

NotificationInstanceService.java

public class NotificationInstanceService extends FirebaseInstanceIdService { 
    private static final String TAG = "NotificationInstance"; 

    @Override 
    public void onTokenRefresh() { 

     //Getting registration token 
     String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 

     //Displaying token on logcat 
     Log.d(TAG, "Refreshed token: " + refreshedToken); 

     sendRegistrationToServer(refreshedToken); 

    } 

    private void sendRegistrationToServer(String token) { 
     //You can implement this method to store the token on your server 
     //Not required for current project 
     OkHttpClient client = new OkHttpClient(); 
     //Create the request body 
     RequestBody body = new FormBody.Builder().add("Token", token).build(); 
     //Know where to send the request to 
     Request request = new Request.Builder().url("<db link>.appspot.com/fcm/register.php") 
       .post(body) 
       .build(); 
     //Create 
     try { 
      client.newCall(request).execute(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 
} 

I wdrożony na https://<db link>.appspot.com, plik pod /fcm/register.php który wygląda tak:

register.php

<?php 
    if (isset($_POST["Token"])) { 

      $_uv_Token=$_POST["Token"]; 
      $conn = mysqli_connect("<db link>.appspot.com","root","","fcm") or die("Error connecting"); 
      $q="INSERT INTO users (Token) VALUES ('$_uv_Token') " 
       ." ON DUPLICATE KEY UPDATE Token = '$_uv_Token';"; 

     mysqli_query($conn,$q) or die(mysqli_error($conn)); 
     mysqli_close($conn); 
    } 
?> 

I jestem zdezorientowany, ponieważ nie wydaje mi się, żebym napisał coś do mojej bazy danych o nazwie użytkownicy, które wiem, że już utworzyłem w serwerze MySQL utworzonym na phpMyAdmin. Wiem, że nazwa użytkownika i hasło są już ustawione na register.php. Czy istnieje sposób debugowania, czy mój skrypt faktycznie wchodzi w kod PHP? Jak mogę debugować kod PHP? Ja również, że Żądanie jest rzeczywiście budowane, ponieważ mogę debugować tę część kodu. Każda pomoc będzie doceniona. Dzięki!

EDIT: Niektóre pliki, które mogą być pomocne, które stworzyłem, gdy próbuje wdrożyć mój serwer:

app.yaml:

application: <app server url> 
service: default 
runtime: php55 
api_version: 1 
version: alpha-001 

handlers: 

- url: /(.+\.(ico|jpg|png|gif))$ 
    static_files: \1 
    upload: (.+\.(ico|jpg|png|gif))$ 
    application_readable: true 

- url: /(.+\.(htm|html|css|js))$ 
    static_files: \1 
    upload: (.+\.(htm|html|css|js))$ 
    application_readable: true 

- url: /(.+\.php)$ 
    script: \1 
    login: admin 

- url: /.* 
    script: index.php 
    login: admin 

- url: /.* 
    script: register.php 
    login: admin 

config.inc.php:

<?php 
$cfg['blowfish_secret'] = '<Secret>'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ 

/* 
* Servers configuration 
*/ 
$i = 0; 

// Change this to use the project and instance that you've created. 
$host = '/cloudsql/<app server url>:us-central1:<database name>-app-php'; 
$type = 'socket'; 

/* 
* First server 
*/ 
$i++; 
/* Authentication type */ 
$cfg['Servers'][$i]['auth_type'] = 'cookie'; 
/* Server parameters */ 
$cfg['Servers'][$i]['socket'] = $host; 
$cfg['Servers'][$i]['connect_type'] = $type; 
$cfg['Servers'][$i]['compress'] = false; 
/* Select mysql if your server does not have mysqli */ 
$cfg['Servers'][$i]['extension'] = 'mysqli'; 
$cfg['Servers'][$i]['AllowNoPassword'] = true; 
/* 
* End of servers configuration 
*/ 

/* 
* Directories for saving/loading files from server 
*/ 
$cfg['UploadDir'] = ''; 
$cfg['SaveDir'] = ''; 

$cfg['PmaNoRelation_DisableWarning'] = true; 
$cfg['ExecTimeLimit'] = 60; 
$cfg['CheckConfigurationPermissions'] = false; 
// [END all] 

php.ini:

google_app_engine.enable_functions = "php_uname, getmypid" 

Edycja: tekstu dla przeglądarki będą .appspot.com/FCM/register.php

tablicy (11) {[ "pmaCookieVer"] => łańcucha (1) "5" [ "pma_lang"] => string (2) "en" ["pma_collation_connection"] => string (15) "utf8_unicode_ci" ["pma_console_height"] => ciąg (2) "92" ["SACSID"] => ciąg (355) "~ AJKiYcFgym76QZfbMX35ddCTdKKf-O7q5koLvNZ0coWTMvw9aNlR5fusNyLRzFyw5DB_t2ygVuTEjHwgrgBco4-wr_V3Eer_Mf0CDuGX2e4IpirCNeiGxkRvaLgRPPyZNZWKUx1mF_DChjsksTirkY5WCzlA3G3MO9bBScrLw8kNOFGnvzkev3-B2x31s_TmnDN5aJ0G3-nPueI4FPpKaaMlPsITziccvXMpiehglQOKoo1Bol3EZSF1tjI9QoJuc-6X_sHgJ0IEppg7K-cBapaEx5CmDD2kWOggnVPWnGj1SiKFUnE3DZD46bjovf5me7IdwfVX22bv5D2PJDPQEN4m3D7yP3-WDG" [ "pma_console_config"] => łańcuch (103) "{" alwaysExpand ": false," startHistory ": false," currentQuery ": true," enterExecutes ": false," darkTheme ": false}" ["pma_console_mode"] => ciąg (4) "pokaż" [ "phpMyAdmin"] => łańcuch (40) "cfd814e10982d138c7ed4a3ef510c454c0e5f9b9" [ "pma_iv-1"] => łańcuch (24) "bSPnJOOBe5x0iXPbbU5Nww ==" [ "pmaUser-1"] => łańcuch (24) „oHSLKZ7q6eOaXJ475Q6tzw = =”[ "pmaPass-1"] => łańcuch (24) "dwKZ9gQPCoe/Uk4sWS4s2g =="}

nowy register.php:

<?php 
    if (isset($_REQUEST["Token"])) { 

      $_uv_Token=$_REQUEST["Token"]; 
      $conn = mysqli_connect("/cloudsql/<Database ServerURL>","root","","FCM") or die("Error connecting"); 
      $q="INSERT INTO users (Token) VALUES ('$_uv_Token') " 
       ." ON DUPLICATE KEY UPDATE Token = '$_uv_Token';"; 
     var_dump(mysqli_query($conn,$q)); 
     mysqli_query($conn,$q) or die(mysqli_error($conn)); 
     mysqli_close($conn); 
    } else { 
     var_dump($_REQUEST); 
    } 
?> 

NotificationInstanceService.java

Nowy post Zapytanie:

Request request = new Request.Builder().url("<Application Server>/fcm/register.php?Token=123") 
      .post(body) 
      .build(); 
+0

jeśli dodać ' else {var_dump ($ _ REQUEST); } 'do pliku register.php tuż przed'?> 'czy otrzymasz jakieś wyjście? Jeśli nie, spróbuj zastąpić linię zaczynając od 'mysqli_query ($ conn, $ q)' z 'var_dump (mysqli_query ($ conn, $ q));' i spróbuj ponownie tylko dla innego testu. – Hafenkranich

+0

@Hafenkranich, więc dokąd to jest porzucone? Próbowałem postępować zgodnie z Twoją sugestią, ale nie mogę się domyślić, gdzie mogę znaleźć więcej informacji na temat tego wniosku lub czegokolwiek. – user1871869

+0

1. Jeśli wywołasz 'https: // .appspot.com/fcm/register.php' w przeglądarce, powinieneś znaleźć się w' else', ponieważ nie dostarczyłeś tokena przez POST. Sprawdziłbym, czy to działa pierwszy. 2. Jeśli to działa, zmień wszystkie wartości z '$ _POST' na' $ _REQUEST' wewnątrz register.php i wywołaj 'https: // .appspot.com/fcm/register.php? Token = 123'. Powinno to albo wysłać nowego fałszywego użytkownika do bazy danych, albo wydrukować przydatne dane wyjściowe debugowania. 3. Jeśli to działało (użytkownik w db), część php wydaje się działać, a problem jest gdzieś wewnątrz twojego skryptu java. (pamiętaj, aby zresetować wszystko, co sugerowałem zmienić na potrzeby testowania) – Hafenkranich

Odpowiedz

3

nie wiem co to dokładnie jest Twoje pytanie, to nie jest jasne. ale skoro pytasz: Is there any way I can debug whether or not my script is actually going into the PHP code? How can I debug the PHP code? tu jest odpowiedź:

Zmiana kodu php do tego:

<?php 
    if (isset($_POST["Token"])) { 

      $_uv_Token=$_POST["Token"]; 
      $conn = mysqli_connect("<db link>.appspot.com","root","","fcm") or die("Error connecting"); 
      $q="INSERT INTO users (`Token`) VALUES (`{$_uv_Token}`) " 
       ." ON DUPLICATE KEY UPDATE `Token` = `{$_uv_Token}`;"; 

     mysqli_query($conn,$q) or die(mysqli_error($conn)); 
     mysqli_close($conn); 
    } else { 
     echo "Token is not set!"; 
    } 
?> 

następnie w NotificationInstanceService.java czeku odpowiedź OkHttpClient rozmowy:

... 
    try { 
     Response response = client.newCall(request).execute(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    if (!response.isSuccessful()){ 
     Log.w(TAG, "Unexpected response"+response.toString()); 
    } else { 
     Log.w(TAG, "response: "+response.body().string()); 
    } 
...