Как обнаружить мобильного пользователя с помощью Google App Script? - PullRequest
3 голосов
/ 04 октября 2019

Я занимаюсь разработкой приложения для организации, и они часто используют Google Sheets, примерно половина из них использует мобильное приложение Sheets.

Теперь я хочу получать оповещение от пользователя, если они меняют некоторые ячейки' ценности. Это отлично работает в браузере настольного компьютера (Chrome PC, Firefox и т. Д.), Но не работает в мобильном приложении. Я знаю, что это не сработает, и это испортило мой код, потому что после предупреждения есть некоторые другие коды для выполнения, например:

function showAlert(message) {
  var ui = SpreadsheetApp.getUi();

  var result = ui.alert(
     'Please confirm',
     message,
      ui.ButtonSet.YES_NO);

  // Process the user's response.
  if (result == ui.Button.YES) {
    // User clicked "Yes".
    return true;
  } else {
    // User clicked "No" or X in the title bar.
    return false;
  }
}

function Test(){
   if(showAlert("Are you sure?")){
       Logger.log("User says yes");
   }else{
       Logger.log("No");
   }
}

Время выполнения функции в Google App Script составляет 300 секунди пока предупреждение не показывалось, таймер продолжал ждать ввода пользователя. Результатом является тайм-аут сценария без выполнения других кодов, например:

Example of a failed execution due to waiting for user input!

Если есть способ определить, находится ли пользователь на мобильном телефоне, я могупропустите предупреждение, чтобы коды могли быть выполнены, что-то вроде этого

function Test(){
    if( user not on mobile && showAlert("Are you sure?"){
         Logger.log("User says Yes");
    }
}

Возможно ли это? Или можно подождать 1 минуту, если от пользователя нет ответа, пропустить предупреждение и продолжить с другим кодом?

1 Ответ

2 голосов
/ 04 октября 2019

Краткий ответ, это невозможно. Длинный ответ: если вы используете веб-приложение вместо SpreadsheetsApp.getUI ().

Это означает, что вам придется переписывать все приложение целиком, так что имейте это в виду.

Если вы используете веб-приложение, вы можете использовать эту ссылку и изменить ее так, чтобы она соответствовала вашим потребностям следующим образом:

UserBrowserAgent.hmtl

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <div id="response">
    </div>
    <script>
      if (/Mobi/.test(navigator.userAgent)) {
        // mobile!
        document.getElementById("response").textContent = "mobile";
      } else {
        // something else
        document.getElementById("response").textContent = "other";
      }
    </script>
  </body>
</html>

Веб-приложение, которое вызывает страницу

function doGet() {
  return HtmlService.createTemplateFromFile("UserBrowserAgent").evaluate().setTitle("User Agent - Google Apps Script");
}

Надеюсь, это поможет!

...