Ankündigung

Einklappen
Keine Ankündigung bisher.

Google Calendar - update für "neue" GoogleAPI

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • wvhn
    antwortet
    Die geänderte Version ist jetzt im develop branch.

    Gruß
    Wolfram

    Einen Kommentar schreiben:


  • himself
    antwortet
    Funktioniert! Vielen Dank!

    Einen Kommentar schreiben:


  • wvhn
    antwortet
    So. Hier mal ein erster Schuss. In meinen Tests hat die Authorisierung sowohl bei einem Domain-Namen als auch bei der internen IP-Adresse des smartVISU-Servers funktioniert. Die beiden angehängten Dateien müssen anstelle der ./lib/base/config.js und ./pages/base/config.google.html eingespielt werden.

    Kannst Du das mal testen? Es sollte eigentlich ausreichen, die bereits heruntergeladene JSON-Datei mit den Credentials zu laden und dann auf "Authorisieren" zu klicken.

    Wenn das klappt, werde ich noch den etwas geänderten Ablauf auf der Google Developer Seite in die Schritt-für-Schritt-Anleitung einarbeiten.


    Gruß
    Wolfram
    Angehängte Dateien

    Einen Kommentar schreiben:


  • himself
    antwortet
    Hi Wolfram,

    Danke für deinen Support ! Spiele gerne den Tester!

    Einen Kommentar schreiben:


  • wvhn
    antwortet
    Offenbar hat Google schon wieder die Bibliotheken geändert, so dass in smartVISU die Authentifizierung nur noch mit bereits bestehenden Kalendern klappt. Das muss ich mir näher ansehen. Komme aber frühestens nächste Woche dazu.

    Gruß
    Wolfram

    Einen Kommentar schreiben:


  • himself
    antwortet
    Hi Wolfram,

    wie dich vermutlich nicht wundert hattest du recht mit der Klammer...

    HTML-Code:
    [io.smarthomeng] sending data:  {"cmd":"monitor","items":[]} io_smarthomeng.js:343:12
    global_cache: Cache directory is writeable jquery-2.2.4.min.js line 2 > eval:3:12
    pages_cache: Cache directory is writeable jquery-2.2.4.min.js line 2 > eval:3:12
    cookie_cache: Cache directory is writeable jquery-2.2.4.min.js line 2 > eval:3:12
    [io.smarthomeng] receiving data:  {"cmd": "item", "items": []} io_smarthomeng.js:240:12
    [animation.redraw] animation.js:46:10
    Feature Policy: Unbekannte Funktionalität (Feature) "identity-credentials-get" wird ignoriert. cb=gapi.loaded_0:183:73
    Feature Policy: Unbekannte Funktionalität (Feature) "identity-credentials-get" wird ignoriert. cb=gapi.loaded_0:183:359
    Feature Policy: Unbekannte Funktionalität (Feature) "identity-credentials-get" wird ignoriert. cb=gapi.loaded_0:183:376
    Warnungen zu Content-Security-Policy 2
    Diese Seite befindet sich im Kompatibilitätsmodus (Quirks). Das Seitenlayout kann beeinflusst werden. Verwenden Sie für den Standardmodus "<!DOCTYPE html>". iframe
    Content-Security-Policy: (Report-Only-Regel) Die Einstellungen der Seite haben die Ausführung eines Scripts (script-src-elem) auf https://www.gstatic.com/_/mss/boq-identity/_/js/k=boq-identity.IdpIFrameHttp.de.mJtG8ypGaBY.es5.O/am=AAY/d=1/rs=AOaEmlHuix6irBLO7JNyRW9m1HpLxRqemg/m=base blockiert, da er gegen folgende Direktive verstößt: "script-src 'unsafe-inline' 'unsafe-eval' blob: data:" iframe
    Für "https://accounts.google.com/o/oauth2/iframe#origin=http%3A%2F%2F192.168.178.27.nip.io&rpcToken=628304342.1009234" wurde partitionierter Cookie- oder Speicherzugriff verwendet, da es im Kontext eines Drittanbieters geladen wurde und dynamische Zustandspartitionierung aktiv ist. m=base:116:309
    Das Öffnen mehrerer Popups wurde aufgrund fehlender Benutzeraktivierung blockiert. cb=gapi.loaded_0:170:292
    Speicherzugriff automatisch erlaubt für Quelle "http://192.168.178.27.nip.io" auf "http://192.168.178.27".
    googleAuthError:
    Object { error: "idpiframe_initialization_failed", details: "You have created a new client application that uses libraries for user authentication or authorization that are deprecated. New clients must use the new libraries instead. See the [Migration Guide](https://developers.google.com/identity/gsi/web/guides/gis-migration) for more information." }
    index.php:59:15
    [notify.error] id = 3: Google authentication - idpiframe_initialization_failed base.js:1044:11
    Uncaught idpiframe_initialization_failed jquery-2.2.4.min.js line 2 > eval:143:5
        jQuery 3
            <anonym>
            dispatch
            handle​
    Ich denke das ist das Problem: ou have created a new client application that uses libraries for user authentication or authorization that are deprecated. New clients must use the new libraries instead.



    Einen Kommentar schreiben:


  • wvhn
    antwortet
    Hast Du wie oben angegeben die geschweiften Klammern eingefügt? Im Code oben in der 2. und der 6. Zeile.

    Die Fehlermeldung "unexpected token 'else'…" spricht dafür, dass mit den Klammern etwas schief gelaufen ist. Achtung auch beim Kopieren des Codes aus dem Post: hierbei werden häufig nicht druckbare Leerzeichen eingefügt.

    Gruß
    Wolfram

    Einen Kommentar schreiben:


  • himself
    antwortet
    Hi Wolfram,

    habe den Code eingefügt. Jetzt kann ich die Autorisierung nicht mehr starten. Die Console sagt folgendes:

    HTML-Code:
    index.php?page=config:88 [root.html] first init of driver
    io_smarthomeng.js:213 [io.smarthomeng] opening websocket on ws://192.168.178.27:2424
    animation.js:39 [animation.prepare]
    io_smarthomeng.js:347 [io.smarthomeng] web socket not ready: {"cmd":"monitor","items":[]}
    base.js:1044 [notify.info] id = 1: Configuration - Die Konfiguration wurde erfolgreich gespeichert.
    index.php?page=config.google:61 Uncaught SyntaxError: Unexpected token 'else' (at index.php?page=config.google:61:6)
    animation.js:46 [animation.redraw]
    io_smarthomeng.js:343 [io.smarthomeng] sending data: {"cmd":"proto","ver":4}
    io_smarthomeng.js:343 [io.smarthomeng] sending data: {"cmd":"identity","sw":"smartVISU","ver":"v3.5.0", "browser":"Chrome","bver":"134"}
    io_smarthomeng.js:343 [io.smarthomeng] sending data: {"cmd":"monitor","items":[]}
    index.php?page=config:455 global_cache: Cache directory is writeable
    index.php?page=config:2068 pages_cache: Cache directory is writeable
    index.php?page=config:3681 cookie_cache: Cache directory is writeable
    io_smarthomeng.js:240 [io.smarthomeng] receiving data: {"cmd": "proto", "ver": 4.1, "server": "module.websocket", "time": "2025-03-22T09:53:06.298366"}
    io_smarthomeng.js:240 [io.smarthomeng] receiving data: {"cmd": "item", "items": []}
    index.php?page=config.google:73 Uncaught ReferenceError: grantOfflineAccess is not defined
    at HTMLBodyElement.onclick (index.php?page=config.google:73:38)
    onclick @ index.php?page=config.google:73​
    Sieht für mich aus als ob iene Klammer oder ähnlichesa fehlt. Habe leider von html absolut keine Ahnung.

    Gruß

    Einen Kommentar schreiben:


  • wvhn
    antwortet
    In ./Pages/base/config.google.html ist in Zeile 56 folgender Code:
    Code:
    function(resp) {
        if (resp.error)
            // possible errors: idpiframe_initialization_failed (with subtype), popup_closed_by_user, popup_blocked_by_browser, access_denied, immediate_failed
            params.window.postMessage({ subject: 'googleauth', error: { code: resp.error, message: resp.error_subtype } }, params.origin);
    ​
    Den könntest Du mal erweitern zu
    Code:
    function(resp) {
        if (resp.error){
            // possible errors: idpiframe_initialization_failed (with subtype), popup_closed_by_user, popup_blocked_by_browser, access_denied, immediate_failed
            console.log('googleAuthError:', resp);
            params.window.postMessage({ subject: 'googleauth', error: { code: resp.error, message: resp.error_subtype } }, params.origin);​
        }
    Achte dabei auf die zusätzlichen geschweiften Klammern um den Code für die if-Anweisung. In der Konsole sollte dann hoffentlich das Objekt für die Antwort angezeigt werden. Wenn Du das öffnen kannst, sollten weitere Details zu dem Fehler angezeigt werden.

    Lässt sich das Objekt nicht öffnen (weil der iFrame schon geschlossen ist), dann kannst Du 'resp' in der console.log-Zeile durch 'resp.error_subtype' ersetzen. Möglicherweise ist das aber ein Relikt aus der alten Bibliothek und es muss jetzt 'resp.details‘ heißen. Sorry für die Konjunktive, aber ich kann das gerade nicht selbst testen.

    Die Google API Referenz sagt zu dem Fehler folgendes:
    idpiframe_initialization_failed: Failed to read the 'localStorage' property from 'Window'
    Dieser Fehler tritt auf, wenn Drittanbieter-Cookies und die Datenspeicherung nicht aktiviert sind in Ihrem Browser. Diese Optionen sind für die Google Log-in-Bibliothek erforderlich. Weitere Info finden Sie unter Drittanbieter-Cookies und Datenspeicherung Hinweis :In Ihrer eigenen App sollten Sie die Nutzer auffordern, Drittanbieter-Cookies und Datenspeicherung zu aktivieren, oder eine Ausnahme für accounts.google.com hinzuzufügen.

    idpiframe_initialization_failed: Not a valid origin for the client
    Dieser Fehler tritt auf, wenn die registrierte Domain nicht mit der Domain übereinstimmt, auf dem die Webseite gehostet wird. Achten Sie darauf, dass der von Ihnen registrierte Ursprung mit der URL übereinstimmt im Browser.
    Gruß
    Wolfram

    Einen Kommentar schreiben:


  • himself
    antwortet
    Hi Wolfram,

    konnte heute erst testen. Die Entwicklerconsole sieht so aus:

    grafik.png

    Da waren weitere Dinge drin aber ich habe die Sicherheitseinstellungen runter geschraubt und die Meldungen waren weg. Problem bleibt aber bestehen. ​

    Die Fehlermeldungen sind diese:

    grafik.png

    grafik.png

    Das sind dir beiden Fehlermeldungen
    Angehängte Dateien
    Zuletzt geändert von himself; 19.03.2025, 14:23.

    Einen Kommentar schreiben:


  • wvhn
    antwortet
    Wie lautet denn die Fehlermeldung genau? Falls der Fehler „idpiframeinitialization failed."​ auftritt, liefert das Skript den Grund mit. Der Fehler sollte auch im roten Dreieck oben links angezeigt werden.
    Gibt es Meldungen in der Entwicklerkonsole des Browsers?

    Gruß
    Wolfram

    Einen Kommentar schreiben:


  • himself
    antwortet
    Hi Wolfram,

    ich verwende die aktuelle Version, 3.5. Die Lösungshinweise habe ich auch gefunden, verstehe sie ehrlich gesagt aber nicht. Die eine, die etwas von 3rd party cockies schreibt hat nicht geholfen.
    Die Dinge aus deinen Post 272 habe ich alle durchgeführt, leider ohne Veränderung. Bin tatsächlich etwas ratlos. Vielleicht hilft noch die Information dass der Dialog nicht schliesst nachdem ich das Google-PopUp-Fenster abgeschlossen habe.

    Einen Kommentar schreiben:


  • wvhn
    antwortet
    Welche Version von smartVISU verwendest Du? v3.4 sollte es mindestens sein.
    Gibt es weitere Info zu dem Fehler "idpiframeinitialization failed."​? Wenn man diesen googelt, gibt es einige Lösungshinweise.

    Gruß
    Wolfram

    EDIT: habe gerade den Anmeldeprozess durchlaufen - allerdings mit localhost. Da ich gerade keinen Testserver habe, kann ich die Autherntifizierung mit IP-Adresse nicht testen. nip.io existiert aber noch und sollte so funktionieren. Siehe Punkt 3 im Post 272.
    Zuletzt geändert von wvhn; 16.03.2025, 23:51.

    Einen Kommentar schreiben:


  • himself
    antwortet
    Hallo zusammen,

    ich wollte heute den Google Kalender einbinden. Soweit klappt alles wie beschrieben. Allerdings bekomme ich nach Durchlaufen/durchklicken des Authorisierungsfensters den Fehler: "idpiframeinitialization failed."
    Der Kalender wird nicht in der config.ini angelegt.
    Ich kann das zwar manuell tun aber ohne token bringt es natürlich nichts, und den kann ich dem json. File nicht entnehmen.
    Was mir aufgefallen ist: Die Testuser Freigabe kann ich erst nach Erstellen der Webanmeldung machen. Ich denke das spielt keine Rolle aber ansonsten funktioniert es genauso wie im HowTo beschrieben ist.

    Der Fehler bei Aufrum der index Seite lautet: "HTTP request failed! HTTP1.1: 400 Bad request. Unable to retrieve access token."

    Einen Kommentar schreiben:


  • wvhn
    antwortet
    Moin Michael,

    es gibt nur eine config.ini für smartVISU und die liegt im Hauptverzeichnis von smartVISU (i.d.R /var/www/html/smartVISU). Folgende Schlüssel musst Du in die config.ini der aktuellen Installation übertragen:
    Code:
    calendar_google_client_id = ""
    calendar_google_client_secret = ""
    calendar_google_refresh_token = ""
    die Zugangsdaten werden jeweils zwischen die Anführungszeichen gesetzt.

    Gruß
    Wolfram

    Einen Kommentar schreiben:

Lädt...
X