Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей

Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.

Недавно клиент сделал запрос,Оценщики, которые входят в систему экзаменов, обязаны фиксировать свое текущее местоположение. Хотя в веб-форме его можно найти по IP.,Но IP слишком легко подделать,Так что для большей точности,Наконец решил использоватьВичатМини программа,Хотя есть вероятность мошенничества,Но это лучше, чем веб-форма.

1. Подготовка

Поскольку мы хотим найти, нам обязательно нужно найти функциональный API, связанный с картой, и выполнить поиск в документации по разработке WeChat. Потому что нам нужно только записать здесь функцию статуса и не нужно открывать карту, поэтому мы используем только wx. получить местоположение. Проверив этот метод, я обнаружил, что WeChat предоставляет только долготу и широту местоположения, но не предоставляет китайское название местоположения.

Когда мы хотим сохранить адрес, мы точно не можем просто сохранить широту и долготу. Вообще этого никто не может понять. Но фишка в том, что после поиска я не обнаружил, что апплет WeChat предоставляет эту функцию. После поиска в Интернете Baidu Map и Amap имеют функции API для получения местоположений по текущей долготе и широте. Учитывая, что апплет прогноза погоды в прошлый раз использовал Amap, давайте на этот раз воспользуемся функциями Amap. Метод тот же. Чтобы создать приложение позиционирования на открытой платформе Amap, выполните очень простые шаги. На первом этапе выберите «Навигация» в качестве типа. На втором этапе выберите «Мини-программа WeChat» в качестве платформы. После создания элемента Вы получите ключ приложения.

2. Создайте небольшой программный проект.

Давайте сначала посмотрим, каков результат функции getLocation в мини-программе.

Откройте index.js и измените код метода onLoad на странице ({}) на следующий

Язык кода:javascript
копировать
wx.getLocation({
      type: 'wgs84',
      success(res) {
        console.log("-----success location-----")
        console.log(res)

        //var latitude = res.latitude
        //var longitude = res.longitude
        // wx.openLocation({
        //   latitude,
        //   longitude,
        //   scale: 18
        // })         

      },
      fail(res) {
        console.log("-----fail location-----")
        console.log(res)      
      }
    });

Семейное ведро Jetbrains 1 год 46, стабильная послепродажная гарантия

После компиляции, если использовать его впервые, будет сообщено напоминание о необходимости авторизации. Затем необходимо сначала добавить кусок кода в app.json.

Язык кода:javascript
копировать
"permission": {
    "scope.userLocation": {
      "desc": «Информация о вашем местоположении будет использоваться Mini Отображение эффекта интерфейса положения программы"
    }
  }

, а затем авторизуйте позиционирование. После успешной авторизации вы увидите строку json, напечатанную на консоли:

Важными являются два данных: широта и долгота. Значение остальных полей можно узнать в документе, в котором есть подробные пояснения.

Если вы откроете часть комментариев в приведенном выше коде, текущая карта будет отображена после компиляции апплета. По карте позиционирование неточное. Я не проверял причину, предполагаю, что позиционирование осуществляется через IP, поэтому есть несоответствие, если проверить на мобильном телефоне, позиционирование точное.

3. Найдите местоположение с помощью API Amap.

Измените файл index.wxml, чтобы на странице отображалось имя местоположения.

Язык кода:javascript
копировать
<view>
<text>{
  
  {address}}</text>
<view wx:for="{
  
  {arrAddress}}">
  <text>
    {
  
  {item.address}} -- {
  
  {item.name}}
  </text>
</view>
<button open-type="openSetting">Откройте страницу настроек авторизации</button> 
</view>

В первом текстовом теге хранится название местоположения. Пока не обращайте внимания на тег циклического просмотра. Кнопка используется для открытия страницы настроек авторизации. В инструментах разработки мини-программ иногда возникают проблемы, когда авторизация используется не в первый раз. иногда диалоговое окно авторизации не выскакивает и его можно открыть прямо через эту кнопку. Ниже я также расскажу о том, как настроить напоминание диалогового окна и затем открыть страницу авторизации.

Найдите API позиционирования, предоставляемый Amap.,Войдите на сайт открытой платформы Amap,оказаться“поддержка развития”–>”Вичат Мини программаSDK” –> “Справочное руководство”–>”Базовый класс”,

Следующий метод getPoiAround(Object), окружающий адрес POI, и адрес позиционирования getRegeo(Object) могут получить адрес, но мы используем его только для определения местоположения, поэтому просто используйте второй. Обновите код index.js следующим образом.

Язык кода:javascript
копировать
const amapFile = require('../../utils/amap-wx.js')
const app = getApp()

Page({
  data: {    
    arrAddress:[],
    address:''
  },  
  onLoad: function () {
    var $that = this;
    wx.getLocation({
      type: 'wgs84',
      success(res) {
        console.log("-----success location-----")
        console.log(res)

        var myAmapFun = new amapFile.AMapWX({ key: app.baseData.gdLocationKey });
        myAmapFun.getRegeo({
          success: function (data) {
            
            // успешный обратный вызов
            console.log("data ----- ")
            console.log(data)
            
            var address = data[0].desc + "【" + data[0].name + "】"
            $that.setData({ address: address });
          },
          fail: function (info) {
            //Ошибочный обратный вызов
            console.log(info)
            msg(info.errMsg)
          }
        });      

      },
      fail(res) {
        console.log("-----fail location-----")
        console.log(res)      
      }
    });    
    
  },
  onReady:function(){
    console.log("----onReady-----") 
  }
})

После компиляции название локации появится на странице симулятора. Также возникает проблема с ошибкой. Если вы используете мобильный телефон, проблем не возникнет.

Фактически, глядя на приведенный выше код, вы можете определить текущее местоположение напрямую с помощью API AutoNavi, не используя wx.getLocation мини-программы. Причина, по которой здесь все еще используется wx.getLocation, — это напоминание о причине авторизации, но это так. только что написал так. Тоже есть проблема. Если это не первая авторизация, то будет сообщаться только об ошибке, а диалоговое окно напоминания об авторизации не выскочит. Здесь нужно самому написать поле напоминания.

4. Настройте диалоговое окно статуса авторизации.

Сначала извлеките приведенный выше код в метод, я поместил его здесь в util.js.

Язык кода:javascript
копировать
module.exports={
  msg:msg,
  getLocation: getLocation
}
function msg(title){  
  wx.showToast({
    title: title,
    icon: "success",
    duration: 1000
  })
}
function getLocation($that) {
  var address ;
  wx.getLocation({
    type: 'wgs84',
    success(res) {
      console.log("-----success location-----")
      console.log(res)
      var myAmapFun = new amapFile.AMapWX({ key: app.baseData.gdLocationKey });
      myAmapFun.getRegeo({
        success: function (data) {
          // успешный обратный вызов
          console.log("data ----- ")
          console.log(data)          
          address = data[0].desc + "【" + data[0].name+ "】"
          $that.setData({ address: address });
        },
        fail: function (info) {
          //Ошибочный обратный вызов
          console.log(info)
          msg(info.errMsg)
        }
      })
    },
    fail(res) {
      console.log("-----fail location-----")
      console.log(res)
      //settingLoaction($that)
    }
  });
}

Изменить index.js

Язык кода:javascript
копировать
const util = require('../../utils/util.js')
const app = getApp()
Page({
  data: {    
    arrAddress:[],
    address:''
  },  
  onLoad: function () {
    
    console.log("----onLoad-----")
    util.getLocation(this);
    
  }
})

После компиляции местоположение также появится в симуляторе. В это время нажмите кнопку «Открыть страницу настроек авторизации» в симуляторе, отключите переключатель «Использовать мое географическое местоположение», перекомпилируйте апплет, и консоль сообщит об этом. ошибка. Но симулятор не выводит диалоговое окно авторизации. Даже если вы просто используете API Amap, консоль сообщит об ошибке:

{errCode: «0», errMsg: «getLocation:fail auth Deny»} сообщает, что местоположение не авторизовано.

Определение наличия авторизации на самом деле заключается в определении истинности «scope.userLocation» в текущих настройках пользователя, полученных через апплет WeChat.

Напишите метод суждения

Язык кода:javascript
копировать
function settingLoaction($that){
  wx.getSetting({    
    success: function (res) {
      console.log("-----userLocation-----")
      console.log(res)
      if (res.authSetting['scope.userLocation'] != true) {
        wx.showModal({
          title: «Авторизовать текущее местоположение»,
          content: «Необходимо получить ваше географическое местоположение, пожалуйста, подтвердите авторизацию, иначе необходимые вам данные невозможно будет получить»,
          success: function (res) {
            if (res.cancel) {//Нажмите, чтобы отменить
              msg("Ошибка авторизации 1!")
              getLocation($that)
            } else if (res.confirm) {//Нажмите ОК.
              wx.openSetting({
                success: function (res) {
                  console.log(res)
                  if (res.authSetting['scope.userLocation'] == true) {
                    msg("Авторизация успешна 1!")
                    getLocation($that)
                  } else {
                    msg("Ошибка авторизации 2!")
                    getLocation($that)
                  }
                }
              })
            }
          }
        });
      }
    }
  });
}

Затем измените вышеуказанное getLocation(that) Если позиционирование не удается получить в методе, оно закомментируется в возвращаемой функции. settingLoaction(that) Просто включите его. В это время перекомпилируйте апплет, и появится настроенное диалоговое окно. Метод, который я здесь написал, заключается в том, что диалоговое окно исчезнет только тогда, когда пользователь разрешит его. При фактическом использовании вы можете управлять им в соответствии со своими потребностями.

5. Получить PoiAround

Это функция, предоставляемая Amap для получения 20 адресов по долготе и широте. Просто замените приведенный выше getRegeo этим, а затем присвойте значение внешнему интерфейсу.

$that.setData({ arrAddress: data.markers });

Заявление об авторских правах: Содержание этой статьи добровольно предоставлено пользователями Интернета, а мнения, выраженные в этой статье, представляют собой только точку зрения автора. Этот сайт предоставляет только услуги по хранению информации, не имеет никаких прав собственности и не принимает на себя соответствующие юридические обязательства. Если вы обнаружите на этом сайте какое-либо подозрительное нарушение авторских прав/незаконный контент, отправьте электронное письмо, чтобы сообщить. После проверки этот сайт будет немедленно удален.

Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/203613.html Исходная ссылка: https://javaforall.cn

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода