<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    Everyone,<br>
    <br>
    the Android App "latest" build is now updated to use the official
    OVMS API key.<br>
    <br>
    This is now a release candidate, can & should be tested as a
    replacement for the current play store release.<br>
    <br>
    As written before, this works regardless of the server side API
    update, if no errors are found I'll release that to all users.<br>
    <br>
    Regards,<br>
    Michael<br>
    <br>
    <br>
    <div class="moz-cite-prefix">Am 06.01.24 um 20:54 schrieb Michael
      Balzer:<br>
    </div>
    <blockquote type="cite"
      cite="mid:47bbc94b-7eb2-40da-a42e-9f161219162d@expeedo.de">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      Everyone,<br>
      <br>
      we need some auditing & beta test help on this.<br>
      <br>
      I've just finished the migration for the server & App side.
      Everything works fine in my test environment, but I had WTF
      moments on the way. Some magically resolved themselves on the next
      day, so I have no idea why they occured in the first place.<br>
      <br>
      New server code is in Server/fcm, see README for details: <a
        class="moz-txt-link-freetext"
href="https://github.com/openvehicles/Open-Vehicle-Server/tree/fcm/v3"
        moz-do-not-send="true">https://github.com/openvehicles/Open-Vehicle-Server/tree/fcm/v3</a><br>
      <br>
      The server now uses a child process for FCM communication, as each
      delivery attempt now takes 0.3 seconds. The new code also now
      automatically cleans up expired App tokens.<br>
      <br>
      New App code & build is in Android/master: <a
        class="moz-txt-link-freetext"
href="https://github.com/openvehicles/Open-Vehicle-Android/tree/master/latest"
        moz-do-not-send="true">https://github.com/openvehicles/Open-Vehicle-Android/tree/master/latest</a><br>
      <br>
      The App currently uses my API IDs (File "google-services.json")
      instead of the official OpenVehicles version, this needs to be
      changed for the release. It should nevertheless work with
      api.openvehicles.com, but I haven't tested that yet.<br>
      <br>
      FCM makes it harder to configure an App for other servers than
      build into the App. I've done some experimentation and found a way
      to still keep the configuration as simple as before, i.e. you just
      need the custom FCM sender ID (which now always is the FCM/cloud
      project ID). Caveat is, this uses undocumented behaviour, so may
      need to be changed in the future.<br>
      <br>
      See my comment & explanation here: <br>
      <a class="moz-txt-link-freetext"
href="https://github.com/openvehicles/Open-Vehicle-Android/blob/master/OpenVehicleApp/src/main/java/com/openvehicles/OVMS/ui/MainActivity.java#L404"
        moz-do-not-send="true">https://github.com/openvehicles/Open-Vehicle-Android/blob/master/OpenVehicleApp/src/main/java/com/openvehicles/OVMS/ui/MainActivity.java#L404</a><br>
      <br>
      Code audits & tests are welcome.<br>
      <br>
      When running your own server, follow the steps described in the
      README to get & install your FCM key. FCM keys btw. don't
      expire until the year 10000. Connect your module & App to your
      server, use "notify raise" to send test messages.<br>
      <br>
      Btw, FCM migration doesn't need to be done in a specific order
      (server/App): this is just an API change on both sides, the
      infrastructure behind the scenes is more or less identical. An FCM
      App receives GCM transmissions and vice versa. Please test that as
      well if possible.<br>
      <br>
      We need to finish migration before June 20, as the GCM APIs will
      then be switched off.<br>
      <br>
      Regards,<br>
      Michael<br>
      <br>
      <br>
      <div class="moz-cite-prefix">Am 29.06.23 um 06:17 schrieb Mark
        Webb-Johnson:<br>
      </div>
      <blockquote type="cite"
        cite="mid:D9CB214B-7730-465D-9312-CDC90D5AAE54@webb-johnson.net">
        <meta http-equiv="content-type"
          content="text/html; charset=UTF-8">
        Oh, google. They do love to deprecate…
        <div><br>
        </div>
        <div>I can handle the server side. But not sure what needs to be
          done there. Presumably this like the C2DM -> GCM migration
          we did a while ago (using a new agreed token type
          apns/c2dm/gcm/etc, if the new approache is not backwards
          compatible). The current server seems to call:</div>
        <div><br>
        </div>
        <blockquote
          style="margin: 0 0 0 40px; border: none; padding: 0px;">
          <div><a href="https://fcm.googleapis.com/fcm/send"
              moz-do-not-send="true" class="moz-txt-link-freetext">https://fcm.googleapis.com/fcm/send</a><br>
          </div>
        </blockquote>
        <div>
          <div><br>
          </div>
          <div>Regards, Mark.</div>
          <div><br>
            <blockquote type="cite">
              <div>On 21 Jun 2023, at 7:25 PM, Michael Balzer <a
                  class="moz-txt-link-rfc2396E"
                  href="mailto:dexter@expeedo.de" moz-do-not-send="true"><dexter@expeedo.de></a>
                wrote:</div>
              <br class="Apple-interchange-newline">
              <div>
                <meta charset="UTF-8">
                <div class="content-isolator__container"
style="caret-color: rgb(0, 0, 0); font-family: "Google Sans", Roboto, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(245, 245, 245); text-decoration: none;">
                  <div class="protected-part">
                    <div class="protected-title">Signed PGP part</div>
                    <div class="protected-content">Time for another
                      Google API deprecation.<br>
                      <br>
                      It seems we'll need to update the Android App
                      & possibly the server now to the FCM API for
                      push notifications, the old GCM API will stop
                      working in June 2024.<br>
                      <br>
                      Anyone volunteering to take care of this?<br>
                      <br>
                      Regards,<br>
                      Michael<br>
                      <br>
                      <div class="moz-forward-container"><br>
                        -------- Weitergeleitete Nachricht --------
                        <table class="moz-email-headers-table"
                          style="border-collapse: collapse;"
                          cellspacing="0" cellpadding="0" border="0">
                          <tbody>
                            <tr style="border-collapse: collapse;">
                              <th valign="BASELINE" nowrap="nowrap"
                                align="RIGHT">Betreff:</th>
                              <td
style="border-collapse: collapse; text-decoration: none !important;">[Action
                                Required] Update your apps to the latest
                                Firebase Cloud Messaging APIs and SDKs</td>
                            </tr>
                            <tr style="border-collapse: collapse;">
                              <th valign="BASELINE" nowrap="nowrap"
                                align="RIGHT">Datum:<span
                                  class="Apple-converted-space"> </span></th>
                              <td
style="border-collapse: collapse; text-decoration: none !important;">Tue,
                                20 Jun 2023 13:26:22 -0700</td>
                            </tr>
                            <tr style="border-collapse: collapse;">
                              <th valign="BASELINE" nowrap="nowrap"
                                align="RIGHT">Von:<span
                                  class="Apple-converted-space"> </span></th>
                              <td
style="border-collapse: collapse; text-decoration: none !important;">Firebase<span
                                  class="Apple-converted-space"> </span><a
                                  class="moz-txt-link-rfc2396E"
href="mailto:firebase-noreply@google.com"
style="color: rgb(66, 133, 244); text-decoration: none;"
                                  moz-do-not-send="true"><firebase-noreply@google.com></a></td>
                            </tr>
                            <tr style="border-collapse: collapse;">
                              <th valign="BASELINE" nowrap="nowrap"
                                align="RIGHT">Antwort an:<span
                                  class="Apple-converted-space"> </span></th>
                              <td
style="border-collapse: collapse; text-decoration: none !important;">Firebase<span
                                  class="Apple-converted-space"> </span><a
                                  class="moz-txt-link-rfc2396E"
href="mailto:firebase-noreply@google.com"
style="color: rgb(66, 133, 244); text-decoration: none;"
                                  moz-do-not-send="true"><firebase-noreply@google.com></a></td>
                            </tr>
                            <tr style="border-collapse: collapse;">
                              <th valign="BASELINE" nowrap="nowrap"
                                align="RIGHT">An:<span
                                  class="Apple-converted-space"> </span></th>
                              <td
style="border-collapse: collapse; text-decoration: none !important;"><a
class="moz-txt-link-abbreviated moz-txt-link-freetext"
                                  href="mailto:dexter@expeedo.de"
style="color: rgb(66, 133, 244); text-decoration: none;"
                                  moz-do-not-send="true">dexter@expeedo.de</a></td>
                            </tr>
                          </tbody>
                        </table>
                        <br>
                        <br>
                        <div class="main" style="padding: 10px 0px;">
                          <table class="table-main table-main-gmail"
style="border-collapse: collapse; border: 1px solid rgb(222, 222, 222); border-spacing: 0px; width: 600px; max-width: 600px; background-color: rgb(255, 255, 255);"
                            align="center">
                            <tbody class="main">
                              <tr style="border-collapse: collapse;">
                                <td
style="border-collapse: collapse; text-decoration: none !important;">
                                  <table role="presentation"
                                    class="logo-table"
style="border-collapse: collapse; width: 596px;">
                                    <tbody>
                                      <tr
style="border-collapse: collapse;">
                                        <td class="logo"
style="border-collapse: collapse; text-decoration: none !important; vertical-align: top; padding: 23px 0px;"
                                          align="center"><a
                                            target="_blank"
href="https://notifications.google.com/g/p/ACUgQrEqj5I8-oiq75nsyLmVgMI_2P_O30pr9ZcpVmk-O8L3G7S5GLuDAQBGbLzVLag80DcGOGlPohe0LlxV3Am7cZNv3WRo1rwY30WWKavJb9NJTk1FmXuKrvFZt8XgZ17HnYFO11bDbl7kSR_82CXEwuwTZU4-udfbmAeK7zzJ3qZft1R_jSAmBvOt677OdR1wfx-Q"
                                            moz-do-not-send="true"
style="color: rgb(66, 133, 244); text-decoration: none;"><img
alt="Firebase
                            Console"
src="https://services.google.com/fh/files/emails/firebase_logo_update.png"
                                              title="Firebase"
                                              moz-do-not-send="true"
style="height: 40px; vertical-align: middle;"></a></td>
                                      </tr>
                                    </tbody>
                                  </table>
                                </td>
                              </tr>
                              <tr style="border-collapse: collapse;">
                                <td class="content"
style="border-collapse: collapse; text-decoration: none !important; vertical-align: top; padding: 30px 25px; border-top-width: 1px; border-top-style: solid; border-top-color: rgb(224, 224, 224); font-weight: 400; font-size: 14px; line-height: 22px; color: rgb(69, 90, 100);">
                                  <div class="hello"
style="color: rgb(38, 50, 56); font-weight: 700; font-size: 20px; font-family: "Google Sans", Roboto, sans-serif; line-height: 26px; padding: 0px;"><a
                                      rel="nofollow"
                                      moz-do-not-send="true"
style="color: rgb(69, 90, 100); text-decoration: none;">Hi Michael</a>,</div>
                                  <p>We’re writing to let you know that
                                    starting<span
                                      class="Apple-converted-space"> </span><strong
style="font-weight: bold !important;">June 20, 2024</strong><span
                                      class="Apple-converted-space"> </span>the
                                    legacy Firebase Cloud Messaging
                                    (FCM) APIs will be discontinued.</p>
                                  <div class="emphasis"
style="padding: 15px 0px 0px; color: rgb(38, 50, 56); font-family: "Google Sans", Roboto, sans-serif; font-size: 16px;">What
                                    do you need to know?<span
                                      class="Apple-converted-space"> </span></div>
                                  <p>On<span
                                      class="Apple-converted-space"> </span><strong
style="font-weight: bold !important;">June 20, 2024,</strong><span
                                      class="Apple-converted-space"> </span>we’re
                                    reducing the number of Firebase
                                    Cloud Messaging (FCM) legacy
                                    register APIs and legacy send APIs
                                    that provide similar functionality.
                                    This step will allow us to provide
                                    you with a more consistent
                                    experience and align with Google
                                    security standards to improve
                                    security, reliability and
                                    performance.</p>
                                  <p>Because of these API decommissions,
                                    some already-deprecated SDKs and
                                    features will stop working after<span
                                      class="Apple-converted-space"> </span><strong
style="font-weight: bold !important;">June 20, 2024.</strong></p>
                                  <p>Please consult the tables below to
                                    find which Firebase Cloud Messaging
                                    (FCM) APIs and corresponding
                                    services/SDKs/features will be
                                    discontinued and replaced with new
                                    alternatives.</p>
                                  <div>
                                    <table
                                      style="border-collapse: collapse;"
                                      width="100%" cellpadding="5"
                                      align="center">
                                      <tbody>
                                        <tr
style="border-collapse: collapse; border-style: solid; border-color: rgb(2, 119, 182); background-color: rgb(2, 119, 182); color: rgb(255, 255, 255); text-align: left;">
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><strong
style="font-weight: bold !important;">Discontinued Send API</strong></p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><strong
style="font-weight: bold !important;">Decommissioned service</strong></p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><strong
style="font-weight: bold !important;">New alternative</strong></p>
                                          </td>
                                        </tr>
                                        <tr
style="border-collapse: collapse;">
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><strong
style="font-weight: bold !important;">Legacy HTTP Protocol</strong></p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>Sending messages via the
                                              Legacy HTTP API.</p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>Send messages via the
                                              HTTP v1 API.</p>
                                          </td>
                                        </tr>
                                        <tr
style="border-collapse: collapse;">
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><strong
style="font-weight: bold !important;">XMPP Protocol</strong></p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>Sending upstream and
                                              downstream messages via
                                              the XMPP API.</p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>Send downstream messages
                                              via the HTTP v1 API.</p>
                                            <p><span>Send upstream
                                                messages via HTTP/<a
                                                  target="_blank"
href="https://notifications.google.com/g/p/ACUgQrFKp0BdXKuz3_mUi3W9wdl6DV3Ib_q0Hn9_rFkVCttPt1pfUS9zAavG0IHLz8EEex1Xah-SSAfcgb2zSplnVRd5kYFwn3MN31jskkUBf1w_RdTqd1tuSW3w6CKsMVdUC9bJHCVT9qvQXy4G6_8J5J-aT-4UFsRnmM4ASLagXT9eO188Q1gAxo7IH3vsHg-U55h8rnJ9zzRdh-DNTbMvJhXav_T7Bw"
                                                  moz-do-not-send="true"
style="color: rgb(2, 119, 182); text-decoration: none; font-family: "Google Sans", Roboto, sans-serif;">gRPC</a><span
class="Apple-converted-space"> </span>directly from the App to your
                                                server.</span></p>
                                          </td>
                                        </tr>
                                        <tr
style="border-collapse: collapse;">
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><strong
style="font-weight: bold !important;">Batch send API</strong></p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>Including multiple send
                                              requests in a single HTTP
                                              request to FCM known as
                                              Batch Send.</p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>Send messages via the
                                              HTTP v1 API, which has
                                              been optimized for fanout
                                              performance</p>
                                          </td>
                                        </tr>
                                      </tbody>
                                    </table>
                                  </div>
                                  <br>
                                  <div>
                                    <table
                                      style="border-collapse: collapse;"
                                      width="100%" cellpadding="5"
                                      align="center">
                                      <tbody>
                                        <tr
style="border-collapse: collapse; border-style: solid; border-color: rgb(2, 119, 182); background-color: rgb(2, 119, 182); color: rgb(255, 255, 255); text-align: left;">
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><strong
style="font-weight: bold !important;">Discontinued Register API</strong></p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><strong
style="font-weight: bold !important;">Decommissioned SDK</strong></p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><strong
style="font-weight: bold !important;">New alternative</strong></p>
                                          </td>
                                        </tr>
                                        <tr
style="border-collapse: collapse;">
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><strong
style="font-weight: bold !important;">GCM register API</strong></p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>Google Cloud
                                              Messaging(GCM) SDKs
                                              (deprecated in 2018).</p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>Latest FCM Android SDK.</p>
                                          </td>
                                        </tr>
                                        <tr
style="border-collapse: collapse;">
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><strong
style="font-weight: bold !important;">Legacy Web register API</strong></p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>FCM JS SDK
                                              version<7.0.0
                                              (deprecated in 2019)</p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>Latest FCM JS SDK.</p>
                                          </td>
                                        </tr>
                                        <tr
style="border-collapse: collapse;">
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><strong
style="font-weight: bold !important;">Instance ID Server API for Web</strong></p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>No SDK related to this
                                              API.</p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>Latest FCM JS SDK.</p>
                                          </td>
                                        </tr>
                                      </tbody>
                                    </table>
                                  </div>
                                  <br>
                                  <div>
                                    <table
                                      style="border-collapse: collapse;"
                                      width="100%" cellpadding="5"
                                      align="center">
                                      <tbody>
                                        <tr
style="border-collapse: collapse; border-style: solid; border-color: rgb(2, 119, 182); background-color: rgb(2, 119, 182); color: rgb(255, 255, 255); text-align: left;">
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><strong
style="font-weight: bold !important;">Discontinued Feature</strong></p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><strong
style="font-weight: bold !important;">Decommissioned service</strong></p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><strong
style="font-weight: bold !important;">New alternative</strong></p>
                                          </td>
                                        </tr>
                                        <tr
style="border-collapse: collapse;">
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><strong
style="font-weight: bold !important;">Server keys</strong></p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>Authenticating requests
                                              with server keys.</p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><span>Authenticate
                                                requests with<span
class="Apple-converted-space"> </span><a target="_blank"
href="https://notifications.google.com/g/p/ACUgQrE8LxWKrfZvL3R5hoSruQL4An9Vg5kFcDYASULp7A5SyUubGdXnXerewny9Rr8OJNp2fTgybuON0zkL4u2XSRmhn29NBmTFNdbm9q-OXyYQVSFt_ax2KxIYXCYbGR1bTLMqPLoLzMpdTgcuyd6wKJCIJj7ToMCrVJzWqOxbg6QUof0_-BUGyGhtnimrCtd-gb5en_iFRjq5OwpVDzqJex2vhuqgrVoeBvAkg344MePoYgqRrkoO113zUXz9flSPIyevZT6KZ4E"
                                                  moz-do-not-send="true"
style="color: rgb(2, 119, 182); text-decoration: none; font-family: "Google Sans", Roboto, sans-serif;">access
                                                  tokens generated from
                                                  authorized service
                                                  accounts</a></span></p>
                                          </td>
                                        </tr>
                                        <tr
style="border-collapse: collapse;">
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><strong
style="font-weight: bold !important;">iOS Direct Channel</strong></p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>Sending messages via
                                              FCM’s direct channel to
                                              iOS devices while they are
                                              running in the foreground.</p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>All iOS messages will be
                                              sent via APNS channel.</p>
                                          </td>
                                        </tr>
                                      </tbody>
                                    </table>
                                  </div>
                                  <br>
                                  <div class="emphasis"
style="padding: 15px 0px 0px; color: rgb(38, 50, 56); font-family: "Google Sans", Roboto, sans-serif; font-size: 16px;">What
                                    do you need to do?<span
                                      class="Apple-converted-space"> </span></div>
                                  <p>Take the following actions before<span
                                      class="Apple-converted-space"> </span><strong
style="font-weight: bold !important;">June 20, 2024</strong>, to ensure
                                    that you have access to the latest
                                    supported features and to reduce the
                                    risk of future decommissions
                                    affecting your usage:</p>
                                  <ul>
                                    <li><strong
style="font-weight: bold !important;">Follow the instructions described
                                        in<span
                                          class="Apple-converted-space"> </span></strong><a
                                        target="_blank"
href="https://notifications.google.com/g/p/ACUgQrF1q42xLDBDWvEr5RHaOfbnfKhv0UdWXB6Vy1kLOjasVBtYD0Wjp4aQJlSaeYnw695zGgel_4mXfwd5JHyH3hmINX1yjPPMSUIxlWcV8-8Af9jmWTRzELbajU3hoHr3k5e8X4QnZaoBBqlKW9ZwgPvaX0SEG_Q761kFR-vQisPxahLO6tzNfIkO3wdWa9b6XDKynfH7tcuSSS5YX3B-wdvH6XeRsMo-Tw"
                                        moz-do-not-send="true"
style="color: rgb(2, 119, 182); text-decoration: none; font-family: "Google Sans", Roboto, sans-serif;">Firebase
                                        FAQ</a><span
                                        class="Apple-converted-space"> </span>to
                                      migrate your individual APIs.</li>
                                    <li><strong
style="font-weight: bold !important;">Update to the latest versions of
                                        Firebase SDKs</strong>.</li>
                                  </ul>
                                  <div>
                                    <table
                                      style="border-collapse: collapse;"
                                      width="100%" cellpadding="5"
                                      align="center">
                                      <tbody>
                                        <tr
style="border-collapse: collapse; border-style: solid; border-color: rgb(2, 119, 182); background-color: rgb(2, 119, 182); color: rgb(255, 255, 255); text-align: left;">
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><strong
style="font-weight: bold !important;">Platform</strong></p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p><strong
style="font-weight: bold !important;">Recommended FCM SDK version</strong></p>
                                          </td>
                                        </tr>
                                        <tr
style="border-collapse: collapse;">
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>Android</p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>>= 23.1.2</p>
                                          </td>
                                        </tr>
                                        <tr
style="border-collapse: collapse;">
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>iOS</p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>>= 10.10.0</p>
                                          </td>
                                        </tr>
                                        <tr
style="border-collapse: collapse;">
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>Web (Javascript)</p>
                                          </td>
                                          <td
style="border-collapse: collapse; text-decoration: none !important; border: 1px solid rgb(224, 224, 224); text-align: center; font-family: "Google Sans", Roboto, sans-serif; font-size: 14px;"
                                            width="33%">
                                            <p>>= 9.22.1</p>
                                          </td>
                                        </tr>
                                      </tbody>
                                    </table>
                                  </div>
                                  <p>Your Firebase project(s) that use
                                    Firebase Cloud Messaging APIs are
                                    listed below:</p>
                                  <ul>
                                    <li><a
href="https://notifications.google.com/g/p/ACUgQrEotRQKxV6LgEoXckEV9bLkUuhj9b1dUEtZwXeBD6i1JG2SipBCU3_-A46djD3KV4k7XrIbasB60E_K8d6_dHHvHD-_2cnyBUix-DEEIJkWkzw6-xrvJDz64B0VJ3FWbNJ4UorZX4uwFpCyKCfCDYM4lMYSuHF4e8JO88lnZyTC_Qa4wW0Kr4YdCa4W7_3w_rq9_-KINgSiodkUhsW7TvTYl1M"
                                        target="_blank"
                                        moz-do-not-send="true"
style="color: rgb(2, 119, 182); text-decoration: none; font-family: "Google Sans", Roboto, sans-serif;">MyOvmsServer
                                        (1043773844049)</a>
                                      <ul>
                                        <li><em
style="font-style: italic !important;">Your recent usage of impacted
                                            APIs/features: Server Keys</em></li>
                                        <li><em
style="font-style: italic !important;">Your recent usage of impacted
                                            APIs/features: Legacy HTTP
                                            protocol</em></li>
                                      </ul>
                                    </li>
                                  </ul>
                                  <div class="emphasis"
style="padding: 15px 0px 0px; color: rgb(38, 50, 56); font-family: "Google Sans", Roboto, sans-serif; font-size: 16px;">We’re
                                    here to help<span
                                      class="Apple-converted-space"> </span></div>
                                  <p>If you have any questions, please
                                    review the<span
                                      class="Apple-converted-space"> </span><a
                                      target="_blank"
href="https://notifications.google.com/g/p/ACUgQrF1q42xLDBDWvEr5RHaOfbnfKhv0UdWXB6Vy1kLOjasVBtYD0Wjp4aQJlSaeYnw695zGgel_4mXfwd5JHyH3hmINX1yjPPMSUIxlWcV8-8Af9jmWTRzELbajU3hoHr3k5e8X4QnZaoBBqlKW9ZwgPvaX0SEG_Q761kFR-vQisPxahLO6tzNfIkO3wdWa9b6XDKynfH7tcuSSS5YX3B-wdvH6XeRsMo-Tw"
                                      moz-do-not-send="true"
style="color: rgb(2, 119, 182); text-decoration: none; font-family: "Google Sans", Roboto, sans-serif;">Firebase
                                      FAQs</a>.</p>
                                  <div style="padding: 20px 0px 0px;">Thanks,<span
                                      class="Apple-converted-space"> </span></div>
                                  <div class="signoff"
style="color: rgb(38, 50, 56); font-weight: 700; font-size: 14px; line-height: 20px;">Todd
                                    on behalf of the Firebase team<span
                                      class="Apple-converted-space"> </span></div>
                                </td>
                              </tr>
                              <tr style="border-collapse: collapse;">
                                <td class="type-msa"
style="border-collapse: collapse; text-decoration: none !important; vertical-align: top; background-color: rgb(244, 244, 246); color: rgb(77, 77, 77); font-weight: 400; font-size: 12px; line-height: 16px; padding: 20px 25px; text-align: center;">
                                  <p
style="text-align: center; font-size: 12px; font-family: Roboto, arial; color: rgb(117, 117, 117);"><strong
style="font-weight: bold !important;">Was this information helpful?</strong><span
                                      class="Apple-converted-space"> </span><br>
                                    <br>
                                    <a
href="https://notifications.google.com/g/p/ACUgQrG_D9izaxqaPAZL66peR0D-yHGGWiULfqLYNXkYVDs80RnpgeXgBN9m4ZnaHzuqsYlOfmgjFoUOsubDA7WspKOx5stGqGz--VfYcwvRfcyYu8wpw3AGMncVzPV7JAmFxyvmWXSFwq2XGOMXnFc1YZFt5J95Sz9hEaOrLOKX4og8ftEzmGUD6Zmv-OofJZ4g6roE8QdQ4L9DIP_mFpopj6y27eSinWXQTZoUBHhCVQ5hGICPSorDMyXpqbhKCdouUctpgfshicsSM_S8LReB3sRCqkl0PQ6RkgRnaBHi4y82il1Hcp4jv1NiDVxrF1w5kg"
                                      target="_blank"
                                      moz-do-not-send="true"
style="color: rgb(26, 115, 232); text-decoration: none; font-family: Roboto, arial; font-size: 14px;"><img
src="https://services.google.com/fh/files/emails/happy_emojis.png"
                                        alt="Yes" moz-do-not-send="true"
style="border: medium; outline: currentcolor; text-decoration: none;"
                                        width="25"></a><span
                                      class="Apple-converted-space"> </span>   <span
                                      class="Apple-converted-space"> </span><a
href="https://notifications.google.com/g/p/ACUgQrFnFdXuJ_VF6ChjiUeTeV5elzVrPymaFMqIFMkzFQvDJk1H8Vs9uUUt76f7Xe2hDm2I35eLjYIdq613WGZApFeuZuv4m4_Iubc9fhSe1sG_m67t1b1CFvQaomK_klAYbLBQIHzrxKtOAlmJfr8L8yO2ILSG0RJkj0CqDnrR4UsTtw8LGENRKq7cnyhBaQr7HrQVfvk1LYOYUbJLvrsp-_g3wvDF-VUQbIkwnDoZNG9AAg8mZIze5vUr32smAfDHfLE_2jZ1HpU4d9XVZ8S7Aph1sX6Nh9J9frhzn9tWZ1MKhVXbRbcCocQK8dD47hUA6OWi6R8"
                                      target="_blank"
                                      moz-do-not-send="true"
style="color: rgb(26, 115, 232); text-decoration: none; font-family: Roboto, arial; font-size: 14px;"><img
src="https://services.google.com/fh/files/emails/neutral_emojis.png"
                                        alt="Neutral"
                                        moz-do-not-send="true"
style="border: medium; outline: currentcolor; text-decoration: none;"
                                        width="25"></a><span
                                      class="Apple-converted-space"> </span>   <span
                                      class="Apple-converted-space"> </span><a
href="https://notifications.google.com/g/p/ACUgQrFb7NDlSkpL4nuGR0g71bgiRuj39SdywVWgFU-V2bmH2sTpWfqP5wOUFG7s8ac6UZHkK2C1YI9ygFwG8W0f4biaJ7NHCvbBCBVpx4qEZWIUe4vPCvT_AtResGaRUZdjcQwchak5V7wjkbCkPSrBwL4_YEg6Clr5tnpkrDQhvxN1uaC2lSKxqNCUYucmV2C-JjRFwjJYG_veUreyuWkV-KiruZVSp7iwhaPvvY2s-mAe9MdTZAwfjeWu6fWjTijb6sMrzS_3z7unUgJg0yFm6lBNaPBINYLBQObetHggsrv5dd2elYGrpoEyQPLuxbU8"
                                      target="_blank"
                                      moz-do-not-send="true"
style="color: rgb(26, 115, 232); text-decoration: none; font-family: Roboto, arial; font-size: 14px;"><img
src="https://services.google.com/fh/files/emails/sad_emojis.png"
                                        alt="No" moz-do-not-send="true"
style="border: medium; outline: currentcolor; text-decoration: none;"
                                        width="25"></a></p>
                                  You have received this mandatory
                                  service announcement to update you
                                  about important changes to Firebase or
                                  your account.<span
                                    class="Apple-converted-space"> </span></td>
                              </tr>
                              <tr style="border-collapse: collapse;">
                                <td class="google-legal"
style="border-collapse: collapse; text-decoration: none !important; text-align: center; vertical-align: top; background-color: rgb(77, 77, 77); padding: 24px;">
                                  <table
style="border-collapse: separate; width: 550px; border: 0px; border-spacing: 0px; padding: 0px;">
                                    <tbody>
                                      <tr
style="border-collapse: collapse;">
                                        <td
style="border-collapse: collapse; text-decoration: none !important;"
                                          valign="middle" align="left"><img
                                            alt=""
src="https://www.gstatic.com/images/branding/googlelogo/2x/googlelogo_light_color_74x24dp.png"
                                            title="Google"
                                            moz-do-not-send="true"
                                            style="display: block;"
                                            width="70" height="24"></td>
                                        <td
style="border-collapse: collapse; text-decoration: none !important; color: rgb(214, 221, 225); font-weight: 400; font-size: 12px; line-height: 14px; padding: 0px;"
                                          valign="middle" align="right"><a
                                            href="x-msg://206/#"
                                            moz-do-not-send="true"
style="color: rgb(244, 244, 246); text-decoration: none;">© 2023 Google
                                            LLC<span
class="Apple-converted-space"> </span><br>
                                            1600 Amphitheatre Parkway<span
class="Apple-converted-space"> </span><br>
                                            Mountain View, CA 94043 USA<span
class="Apple-converted-space"> </span></a></td>
                                      </tr>
                                    </tbody>
                                  </table>
                                </td>
                              </tr>
                            </tbody>
                          </table>
                        </div>
                        <img alt=""
src="https://notifications.google.com/g/img/ACUgQrEI5mdWu4JYedZpX2M5AXc0vjuQU7TBH60nLtsJw3bCHe-DBOvO_BpuLxoZqe0CtNE1MVABJhcogNDEwhCAnwBug8Bu5MlloHVwzQyQdbOHDKm_rFD19mxJ8ihTIL029VCkj7ONUOaX3jhK8w.gif"
                          moz-do-not-send="true" width="3" height="1"></div>
                      <br>
                      <pre class="moz-signature" cols="72">-- 
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26</pre>
                    </div>
                  </div>
                  <br>
                  <iframe class="content-isolator__isolated-content"
                    sandbox="allow-scripts" scrolling="auto"
data-src="data:text/html;charset=UTF-8;base64,PGlmcmFtZS1jb250ZW50IGRhdGEtaWZyYW1lLWhlaWdodD0idHJ1ZSI+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188QlI+T3Ztc0RldiBtYWlsaW5nIGxpc3Q8QlI+T3Ztc0RldkBsaXN0cy5vcGVudmVoaWNsZXMuY29tPEJSPmh0dHA6Ly9saXN0cy5vcGVudmVoaWNsZXMuY29tL21haWxtYW4vbGlzdGluZm8vb3Ztc2RldjxCUj48L2lmcmFtZS1jb250ZW50Pg=="
src="data:text/html;charset=UTF-8;base64,PGlmcmFtZS1jb250ZW50IGRhdGEtaWZyYW1lLWhlaWdodD0idHJ1ZSI+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX188QlI+T3Ztc0RldiBtYWlsaW5nIGxpc3Q8QlI+T3Ztc0RldkBsaXN0cy5vcGVudmVoaWNsZXMuY29tPEJSPmh0dHA6Ly9saXN0cy5vcGVudmVoaWNsZXMuY29tL21haWxtYW4vbGlzdGluZm8vb3Ztc2RldjxCUj48L2lmcmFtZS1jb250ZW50Pg=="
style="border: medium; display: block; overflow: auto;" width="200"
                    height="10"></iframe></div>
                <br class="Apple-interchange-newline">
              </div>
            </blockquote>
          </div>
          <br>
        </div>
        <br>
        <fieldset class="moz-mime-attachment-header"></fieldset>
        <pre class="moz-quote-pre" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated moz-txt-link-freetext"
        href="mailto:OvmsDev@lists.openvehicles.com"
        moz-do-not-send="true">OvmsDev@lists.openvehicles.com</a>
<a class="moz-txt-link-freetext"
        href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev"
        moz-do-not-send="true">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
      </blockquote>
      <br>
      <pre class="moz-signature" cols="72">-- 
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26</pre>
      <br>
      <fieldset class="moz-mime-attachment-header"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.openvehicles.com">OvmsDev@lists.openvehicles.com</a>
<a class="moz-txt-link-freetext" href="http://lists.openvehicles.com/mailman/listinfo/ovmsdev">http://lists.openvehicles.com/mailman/listinfo/ovmsdev</a>
</pre>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26</pre>
  </body>
</html>