国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目次
ミニ プログラム ログ システムの使用方法" >ミニ プログラム ログ システムの使用方法
ホームページ WeChat アプレット ミニプログラム開(kāi)発 ミニ プログラムのログ システムについて説明し、その構(gòu)築方法と使用方法を見(jiàn)てみましょう。

ミニ プログラムのログ システムについて説明し、その構(gòu)築方法と使用方法を見(jiàn)てみましょう。

Jan 21, 2022 am 10:26 AM
アプレット

この記事では、ミニ プログラムのログ システムについて説明し、ミニ プログラム ログ システムの使用方法、ミニ プログラム ログ システムの構(gòu)築方法を紹介します。

ミニ プログラムのログ システムについて説明し、その構(gòu)築方法と使用方法を見(jiàn)てみましょう。

通常、ログ システムは開(kāi)発の重要な部分です。

しかし、さまざまな理由により、フロントエンド開(kāi)発でログの印刷やレポート システムを使用することは一般的ではありません。
しかし、特定のケースでは、ログ システムが驚異的に機(jī)能することがよくあります。

たとえば、チャット システムで次の問(wèn)題が発生しました。

  • 音聲通話中にユーザーに音が聞こえない
  • インスタント メッセージングでは、ユーザーのフィードバックが一部のシナリオ、メッセージを送信できません
  • インスタント メッセージングで、A が B のメッセージに返信するときに、ダイアログ ボックスが表示されないことがあります。
  • インスタント メッセージングで、A が 2 つのメッセージを B に 1 回で送信した後、行、B は 2 番目のメッセージを受信できません。 ヒント
  • インスタント メッセージングでは、音聲メッセージを送信すると、ユーザーは音聲メッセージが送信されたように見(jiàn)えますが、実際には録音がまだ続いています。この時(shí)、ユーザーはネットワークが止まっているのではないかと思い、最終的に自分や他の人の會(huì)話の音聲が録音されていることに気づきました(

)が、上記のエラーはバックグラウンドインターフェースには反映されませんでした。一部のユーザーの攜帯電話モデルに問(wèn)題があるため、問(wèn)題を特定するのは困難です。
ここに log があれば、問(wèn)題のあるコードをすぐに見(jiàn)つけることができます。
コードの問(wèn)題ではない場(chǎng)合は、システムの問(wèn)題ではないことをユーザーに自信を持って答えることができます。

ミニ プログラム ログ システムの使用方法

ミニ プログラム側(cè)には、2 つのミニ プログラム ログ インターフェイスが用意されています。

  • LogManager ( 通常のログ )
  • RealtimeLogManager ( リアルタイム ログ )

公式は、両者の具體的な違いについては紹介していませんでした。これは、Realtime のリアルタイム性を強(qiáng)調(diào)しているだけです。

私の意見(jiàn)では、これらの最大の違いは次のとおりです。

  • LogManager はユーザーに安心感を與えます。LogManager は問(wèn)題があるからです。ユーザーによって手動(dòng)で報(bào)告されます。
  • RealtimeLogManager は開(kāi)発者にとってよりフレンドリーで、ユーザーが知らないうちに問(wèn)題情報(bào)を収集し、ユーザーが気づかないうちに問(wèn)題を修正できます。

LogManager

アプレットによって提供される Log ログ インターフェイス (wx.getLogManager を通じて) ( ) インスタンスを取得します。
注:

  • ログ コンテンツは最大 5M まで保存できます。5M を超えると、古いログ コンテンツは削除されます。
  • ミニ プログラムの場(chǎng)合、ユーザーは button コンポーネントの open-type="フィードバック" を使用して、印刷されたログをアップロードできます。
  • ミニ ゲーム の場(chǎng)合、ユーザーは wx.createFeedbackButton を使用して、印刷されたログをアップロードするボタンを作成できます。
  • 開(kāi)発者は、ミニ プログラム管理バックエンドの左側(cè)のメニュー フィードバック管理 ページから、関連する印刷ログを表示できます。

LogManager インスタンスの作成

ログ インスタンスは、wx.getLogManager() を通じて取得できます。
パラメーターを括弧 { level: 0 | 1 } で渡すことで、wx## の下の関數(shù)である Page のライフサイクル関數(shù)を記述するかどうかを決定できます。 # 名前空間ログ。

    0: 書(shū)きます
  • 1: 書(shū)かない
  •  https://github.com/Kujiale-Mobile/Painter

LogManager インスタンスを使用します #

const logger = wx.getLogManager({ level: 0 })
logger.log({str: 'hello world'}, 'basic log', 100, [1, 2, 3])
logger.info({str: 'hello world'}, 'info log', 100, [1, 2, 3])
logger.debug({str: 'hello world'}, 'debug log', 100, [1, 2, 3])
logger.warn({str: 'hello world'}, 'warn log', 100, [1, 2, 3])

ユーザー フィードバックは、LogManager によって記録されたログをアップロードします。ログが記録された後、ユーザーは

profile

にログオンできます。ミニ プログラムのページで、フィードバックと苦情をクリックし、機(jī)能異常をクリックしてログをアップロードします。

開(kāi)発者はユーザーのフィードバックを処理し、ユーザーとコミュニケーションを行います開(kāi)発者はミニ プログラムのバックグラウンドで

管理できる ->

ユーザーフィードバック -> 機(jī)能異常 ユーザーフィードバック情報(bào)を表示します。 開(kāi)発者は、 Function ->
Customer Service でカスタマー サービス WeChat をバインドできます。バインド後、48 時(shí)間 以內(nèi)に WeChat を通じてフィードバック ユーザーと通信できます。 注: コミュニケーションにユーザーからのフィードバックが必要な場(chǎng)合は、「開(kāi)発者が 48 時(shí)間以內(nèi)にカスタマー サービス メッセージを通じて私に連絡(luò)できるようにする」をチェックしてください。

RealtimeLogManager

アプレットによって提供される リアルタイム ログ

ログ インターフェイス (

を通じて) wx.getRealtimeLogManager () インスタンスを取得します。 ###知らせ:###<ul><li><code>wx.getRealtimeLogManager() 基礎(chǔ)庫(kù) 2.7.1 開(kāi)始支持

  • 官方給出實(shí)時(shí)日志每條的容量上限是 5kb
  • 官方對(duì)每條日志的定義:在一個(gè)頁(yè)面 onShow -> onHide 之間,會(huì)聚合成一條日志上報(bào)
  • 開(kāi)發(fā)者可從小程序管理后臺(tái): 開(kāi)發(fā) -> 運(yùn)維中心 -> 實(shí)時(shí)日志 進(jìn)入小程序端日志查詢頁(yè)面
  • 為了定位問(wèn)題方便,日志是按頁(yè)面劃分的,某一個(gè)頁(yè)面,在onShow到onHide(切換到其它頁(yè)面、右上角圓點(diǎn)退到后臺(tái))之間打的日志,會(huì)聚合成一條日志上報(bào),并且在小程序管理后臺(tái)上可以根據(jù)頁(yè)面路徑搜索出該條日志

    創(chuàng)建 RealtimeLogManager 實(shí)例

    你可以通過(guò) wx.getRealtimeLogManager() 獲取實(shí)時(shí)日志實(shí)例。

    const logger = wx.getRealtimeLogManager()

    使用 RealtimeLogManager 實(shí)例

    const logger = wx.getRealtimeLogManager()
    logger.debug({str: &#39;hello world&#39;}, &#39;debug log&#39;, 100, [1, 2, 3])
    logger.info({str: &#39;hello world&#39;}, &#39;info log&#39;, 100, [1, 2, 3])
    logger.error({str: &#39;hello world&#39;}, &#39;error log&#39;, 100, [1, 2, 3])
    logger.warn({str: &#39;hello world&#39;}, &#39;warn log&#39;, 100, [1, 2, 3])

    查看實(shí)時(shí)日志

    與普通日志不同的是,實(shí)時(shí)日志不再需要用戶反饋,可以直接通過(guò)以下方式查看實(shí)例。

    • 登錄小程序后臺(tái)

    • 通過(guò)路徑 開(kāi)發(fā) -> 開(kāi)發(fā)管理 -> 運(yùn)維中心 -> 實(shí)時(shí)日志 查看實(shí)時(shí)日志

    如何搭建小程序 Log 日志系統(tǒng)

    上面我們知道了小程序的 Log 日志怎么使用,我們當(dāng)然可以不進(jìn)行封裝直接使用。
    但是我們直接使用起來(lái)會(huì)感覺(jué)到十分的別扭,因?yàn)檫@不符合我們程序員單點(diǎn)調(diào)用的習(xí)慣。

    那么接下來(lái)讓我們對(duì)這套 Log 系統(tǒng)進(jìn)行初步的封裝以及全局的方法的日志注入。

    后續(xù)我會(huì)在 github 開(kāi)放源碼,并打包至 npm ,需要的開(kāi)發(fā)者可自行 install 調(diào)用。

    封裝小程序 Log 方法

    封裝 Log 方法前,我們需要整理該方法需要考慮什么內(nèi)容:

    • 打印格式:統(tǒng)一打印格式有助于我們更快的定位問(wèn)題
    • 版本號(hào):方便我們清晰的知道當(dāng)前用戶使用的小程序版本,避免出現(xiàn)舊版本問(wèn)題在新代碼中找不到問(wèn)題
    • 兼容性:我們需要考慮用戶小程序版本不足以支持 getLogManager 、 getRealtimeLogManager 的情況
    • 類型:我們需要兼容 debuglog 、 error 類型的 log日志

    版本問(wèn)題

    我們需要一個(gè)常量用以定義版本號(hào),以便于我們定位出問(wèn)題的代碼版本。
    如果遇到版本問(wèn)題,我們可以更好的引導(dǎo)用戶

    const VERSION = "1.0.0"
    const logger = wx.getLogManager({ level: 0 })
    
    logger.log(VERSION, info)

    打印格式

    我們可以通過(guò) [version] file | content 的統(tǒng)一格式來(lái)更快的定位內(nèi)容。

    const VERSION = "1.0.0"
    const logger = wx.getLogManager({ level: 0 })
    
    logger.log(`[${VERSION}] ${file} | `, ...args)

    兼容性

    我們需要考慮用戶小程序版本不足以支持 getLogManager 、 getRealtimeLogManager 的情況

    const VERSION = "0.0.18";
    
    const canIUseLogManage = wx.canIUse("getLogManager");
    const logger = canIUseLogManage ? wx.getLogManager({ level: 0 }) : null;
    const realtimeLogger = wx.getRealtimeLogManager ? wx.getRealtimeLogManager() : null;
    
    export function RUN(file, ...args) {
      console.log(`[${VERSION}]`, file, " | ", ...args);
      if (canIUseLogManage) {
        logger.log(`[${VERSION}]`, file, " | ", ...args);
      }
    
      realtimeLogger && realtimeLogger.info(`[${VERSION}]`, file, " | ", ...args);
    }

    類型

    我們需要兼容 debug 、 log 、 error 類型的 log日志

    export function RUN(file, ...args) {
        ...
    }
    
    export function DEBUG(file, ...args) {
        ...
    }
    
    export function ERROR(file, ...args) {
        ...
    }
    
    export function getLogger(fileName) {
      return {
        DEBUG: function (...args) {
          DEBUG(fileName, ...args)
        },
        RUN: function (...args) {
          RUN(fileName, ...args)
        },
        ERROR: function (...args) {
          ERROR(fileName, ...args)
        }
      }
    }

    完整代碼

    以上都做到了,就完成了一套 Log 系統(tǒng)的基本封裝。

    const VERSION = "0.0.18";
    
    const canIUseLogManage = wx.canIUse("getLogManager");
    const logger = canIUseLogManage ? wx.getLogManager({ level: 0 }) : null;
    const realtimeLogger = wx.getRealtimeLogManager ? wx.getRealtimeLogManager() : null;
    
    export function DEBUG(file, ...args) {
      console.debug(`[${VERSION}] ${file}  | `, ...args);
      if (canIUseLogManage) {
        logger.debug(`[${VERSION}]`, file, " | ", ...args);
      }
    
      realtimeLogger && realtimeLogger.info(`[${VERSION}]`, file, " | ", ...args);
    }
    
    export function RUN(file, ...args) {
      console.log(`[${VERSION}]`, file, " | ", ...args);
      if (canIUseLogManage) {
        logger.log(`[${VERSION}]`, file, " | ", ...args);
      }
    
      realtimeLogger && realtimeLogger.info(`[${VERSION}]`, file, " | ", ...args);
    }
    
    export function ERROR(file, ...args) {
      console.error(`[${VERSION}]`, file, " | ", ...args);
      if (canIUseLogManage) {
        logger.error(`[${VERSION}]`, file, " | ", ...args);
      }
    
      realtimeLogger && realtimeLogger.error(`[${VERSION}]`, file, " | ", ...args);
    }
    
    export function getLogger(fileName) {
      return {
        DEBUG: function (...args) {
          DEBUG(fileName, ...args)
        },
        RUN: function (...args) {
          RUN(fileName, ...args)
        },
        ERROR: function (...args) {
          ERROR(fileName, ...args)
        }
      }
    }

    全局注入 Log

    通過(guò)該章節(jié)的名稱,我們就可以知道全局注入。
    全局注入的意思就是,不通過(guò)手動(dòng)調(diào)用的形式,在方法寫(xiě)完后自動(dòng)注入 log ,你只需要在更細(xì)節(jié)的地方考慮打印 log 即可。

    為什么要全局注入

    雖然我們實(shí)現(xiàn)了全局 log 的封裝,但是很多情況下,一些新同學(xué)沒(méi)有好的打 log 的習(xí)慣,尤其是前端同學(xué)(我也一樣)。
    所以我們需要做一個(gè)全局注入,以方便我們的代碼書(shū)寫(xiě),也避免掉手動(dòng)打 log 會(huì)出現(xiàn)遺漏的問(wèn)題。

    如何進(jìn)行全局注入

    小程序提供了 behaviors 參數(shù),用以讓多個(gè)頁(yè)面擁有相同的數(shù)據(jù)字段和方法。

    需要注意的是, page 級(jí)別的 behaviors 在 2.9.2 之后開(kāi)始支持

    我們可以通過(guò)封裝一個(gè)通用的 behaviors ,然后在需要 log 的頁(yè)面進(jìn)行引入即可。

    import * as Log from "./log-test";
    
    export default Behavior({
      definitionFilter(defFields) {
        console.log(defFields);
        Object.keys(defFields.methods || {}).forEach(methodName => {
          const originMethod = defFields.methods[methodName];
          defFields.methods[methodName] = function (ev, ...args) {
            if (ev && ev.target && ev.currentTarget && ev.currentTarget.dataset) {
              Log.RUN(defFields.data.PAGE_NAME, `${methodName} invoke, event dataset = `, ev.currentTarget.dataset, "params = ", ...args);
            } else {
              Log.RUN(defFields.data.PAGE_NAME, `${methodName} invoke, params = `, ev, ...args);
            }
            originMethod.call(this, ev, ...args)
          }
        })
      }
    })

    總結(jié)

    連著開(kāi)發(fā)帶整理,林林總總的也有了 2000+ 字,耗費(fèi)了三天的時(shí)間,整體感覺(jué)還是比較值得的,希望可以帶給大家一些幫助。

    也希望大家更重視前端的 log 一點(diǎn)。這基于我自身的感覺(jué),尤其是移動(dòng)端用戶。
    在很多時(shí)候由于 手機(jī)型號(hào) 、 弱網(wǎng)環(huán)境 等導(dǎo)致的問(wèn)題。
    在沒(méi)有 log 時(shí),找不到問(wèn)題的著力點(diǎn),導(dǎo)致問(wèn)題難以被及時(shí)解決。

    后續(xù)我會(huì)在 github 開(kāi)放源碼,并打包至 npm ,開(kāi)發(fā)者后續(xù)可自行 install 調(diào)用。
    后續(xù) 源碼地址npm安裝方法 將會(huì)在該頁(yè)面更新。
    開(kāi)放時(shí)間基于大家需求而定。

    【相關(guān)學(xué)習(xí)推薦:小程序開(kāi)發(fā)教程

    以上がミニ プログラムのログ システムについて説明し、その構(gòu)築方法と使用方法を見(jiàn)てみましょう。の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

    このウェブサイトの聲明
    この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見(jiàn)つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

    ホットAIツール

    Undress AI Tool

    Undress AI Tool

    脫衣畫(huà)像を無(wú)料で

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    寫(xiě)真から衣服を削除するオンライン AI ツール。

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

    完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無(wú)料のコードエディター

    SublimeText3 中國(guó)語(yǔ)版

    SublimeText3 中國(guó)語(yǔ)版

    中國(guó)語(yǔ)版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開(kāi)発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    Python を使用して WeChat アプレットを開(kāi)発する Python を使用して WeChat アプレットを開(kāi)発する Jun 17, 2023 pm 06:34 PM

    モバイル インターネット技術(shù)とスマートフォンの普及により、WeChat は人々の生活に欠かせないアプリケーションになりました。 WeChat ミニ プログラムを使用すると、アプリケーションをダウンロードしてインストールすることなく、ミニ プログラムを直接使用して、いくつかの簡(jiǎn)単なニーズを解決できます。この記事では、Python を使用して WeChat アプレットを開(kāi)発する方法を紹介します。 1. 準(zhǔn)備 Python を使用して WeChat アプレットを開(kāi)発する前に、関連する Python ライブラリをインストールする必要があります。ここでは、wxpy と itchat の 2 つのライブラリを使用することをお?jiǎng)幛幛筏蓼埂?wxpy は WeChat マシンです

    WeChat ミニ プログラムにカードめくり効果を?qū)g裝する WeChat ミニ プログラムにカードめくり効果を?qū)g裝する Nov 21, 2023 am 10:55 AM

    WeChat ミニ プログラムでのカードめくり効果の実裝 WeChat ミニ プログラムでは、カードめくり効果の実裝は、ユーザー エクスペリエンスとインターフェイス インタラクションの魅力を向上させることができる一般的なアニメーション効果です。以下では、WeChat アプレットでカードめくりの特殊効果を?qū)g裝する方法と、関連するコード例を詳しく紹介します。まず、ミニ プログラムのページ レイアウト ファイルに 2 つのカード要素を定義する必要があります。1 つは前面のコンテンツを表示するため、もう 1 つは背面のコンテンツを表示するためです。具體的なサンプル コードは次のとおりです: &lt;!--index.wxml- ->&l

    アリペイ、希少文字ライブラリを収集?補(bǔ)完する「漢字拾い-希少文字」ミニプログラムを開(kāi)始 アリペイ、希少文字ライブラリを収集?補(bǔ)完する「漢字拾い-希少文字」ミニプログラムを開(kāi)始 Oct 31, 2023 pm 09:25 PM

    10月31日の當(dāng)サイトのニュースによると、今年5月27日、アント?グループは「漢字拾いプロジェクト」の立ち上げを発表し、最近新たな進(jìn)展を迎えた:アリペイが「漢字拾い-珍しい文字」ミニプログラムを開(kāi)始協(xié)會(huì)からコレクションを収集する レア文字は、レア文字ライブラリを補(bǔ)完し、アリペイでのレア文字入力方法の改善に役立つように、レア文字に異なる入力エクスペリエンスを提供します?,F(xiàn)在、ユーザーは「漢字ピックアップ」「珍文字」などのキーワードで検索することで「珍文字」アプレットに入ることができる。ミニプログラムでは、ユーザーがシステムで認(rèn)識(shí)?入力されなかった珍しい文字の畫(huà)像を送信し、確認(rèn)後、Alipay のエンジニアがフォントライブラリに追加エントリを作成します。當(dāng)サイトでは、発音が不明瞭な珍しい単語(yǔ)を?qū)澫螭趣筏孔钚陇螀g語(yǔ)分割入力方法をミニプログラムで體験できることに注目しました。ユーザー解體

    小さなプログラムでも反応できますか? 小さなプログラムでも反応できますか? Dec 29, 2022 am 11:06 AM

    ミニプログラムはreactを利用することができます 使い方: 1. 「react-reconciler」に基づいてレンダラーを?qū)g裝し、DSLを生成します; 2. DSLを解析してレンダリングするためのミニプログラムコンポーネントを作成します; 3. npmをインストールし、開(kāi)発者ビルドを?qū)g行しますツール內(nèi)の npm; 4. パッケージを獨(dú)自のページに導(dǎo)入し、API を使用して開(kāi)発を完了します。

    uniapp がミニ プログラムと H5 の間で迅速な変換を?qū)g現(xiàn)する方法 uniapp がミニ プログラムと H5 の間で迅速な変換を?qū)g現(xiàn)する方法 Oct 20, 2023 pm 02:12 PM

    uniapp がミニ プログラムと H5 の間で迅速な変換を?qū)g現(xiàn)するには、具體的なコード例が必要ですが、近年、モバイル インターネットの発展とスマートフォンの普及に伴い、ミニ プログラムと H5 は不可欠なアプリケーション形式となっています。クロスプラットフォーム開(kāi)発フレームワークとして、uniapp は一連のコードに基づいて小規(guī)模プログラムと H5 間の変換を迅速に実現(xiàn)し、開(kāi)発効率を大幅に向上させます。この記事では、uniapp がミニ プログラムと H5 の間で迅速な変換を?qū)g現(xiàn)する方法と、具體的なコード例を紹介します。 1. uniapp uniaの紹介

    ミニ プログラムでパブリック アカウント テンプレート メッセージを使用する方法を説明します (詳細(xì)なアイデア付き) ミニ プログラムでパブリック アカウント テンプレート メッセージを使用する方法を説明します (詳細(xì)なアイデア付き) Nov 04, 2022 pm 04:53 PM

    この記事では、WeChat ミニ プログラムに関するいくつかの関連事項(xiàng)を紹介します。主に、ミニ プログラムでパブリック アカウント テンプレート メッセージを使用する方法を紹介します。一緒に見(jiàn)てみましょう。皆さんのお役に立てれば幸いです。

    Python で簡(jiǎn)単なチャット プログラムを作成するためのチュートリアル Python で簡(jiǎn)単なチャット プログラムを作成するためのチュートリアル May 08, 2023 pm 06:37 PM

    実裝アイデア: チャット ルームのさまざまな機(jī)能を処理するために、スレッドのサーバー側(cè)を確立します。x02 クライアントの確立はサーバーよりもはるかに簡(jiǎn)単です。クライアントの機(jī)能はメッセージの送受信と、特定の文字を特定の規(guī)則に従って入力するため、クライアント側(cè)では、メッセージ受信専用とメッセージ送信専用の 2 つのスレッドを使用するだけで、さまざまな機(jī)能を使用できます。使用しないでください。

    PHP とミニプログラムを使用した地理的位置特定と地図表示 PHP とミニプログラムを使用した地理的位置特定と地図表示 Jul 04, 2023 pm 04:01 PM

    PHP およびミニ プログラムの地理位置測(cè)位と地図表示 地理位置測(cè)位と地図表示は、現(xiàn)代のテクノロジーにおいて必要な機(jī)能の 1 つになっています。モバイルデバイスの普及に伴い、測(cè)位と地図表示に対する人々の需要も高まっています。開(kāi)発プロセスでは、PHP とアプレットの 2 つのテクノロジーが一般的に選択されます。この記事では、PHP およびミニ プログラムでの地理的位置の測(cè)位と地図表示の実裝方法を紹介し、対応するコード例を添付します。 1. PHP での地理位置情報(bào) PHP では、サードパーティの地理位置情報(bào)を使用できます。

    See all articles