發表文章

[flutter] 如何防止GPS偽定位

在 Flutter 開發中,要防止 GPS 偽定位並確保應用程式獲取的地理位置是可信的,可以採取以下方法來符合 Android 和 iOS 的需求: 1. 啟用 Google Play Services 的「位置驗證」 適用於:Android Google 提供了「位置驗證 (Location Verification)」功能,可以偵測裝置的 GPS 是否受到軟體偽造攻擊。 你可以透過 FusedLocationProvider 的 setMockMode(false) 來防止應用程式接受模擬位置。 步驟 在 AndroidManifest.xml 加入權限: < uses-permission android:name = "android.permission.ACCESS_FINE_LOCATION" /> < uses-permission android:name = "android.permission.ACCESS_COARSE_LOCATION" /> 使用 locationSettingsRequest 來確保 GPS 設定正確: import 'package:geolocator/geolocator.dart'; Future<Position> getLocation() async { bool serviceEnabled; LocationPermission permission; // 檢查 GPS 是否開啟 serviceEnabled = await Geolocator.isLocationServiceEnabled(); if (!serviceEnabled) { return Future.error('位置服務未啟用'); } // 檢查權限 permission = await Geolocator.checkPermission(); if (permission == LocationPermission.denied) { permission = await Geolocator.requestPer...

[flutter]flutter如何防止GPS偽定位

在 Flutter 中,要防止 GPS 偽定位(Mock Location),可以採取以下幾種方法: 1. 檢測是否啟用了 Mock Location(Android) 在 Android 設備上,你可以使用 isMockLocation 來判斷位置數據是否是模擬的。 方法 1:透過 Location 插件 import 'package:location/location.dart'; Future<bool> isMockLocationEnabled() async { Location location = Location(); LocationData locationData = await location.getLocation(); return locationData.isMock ?? false; } 方法 2:透過 locationManager (更準確) 使用 MethodChannel 來直接調用原生 Android API 來檢測 Mock Location: import 'package:flutter/services.dart'; Future<bool> isMockLocation() async { const platform = MethodChannel('mock_location_checker'); try { final bool result = await platform.invokeMethod('isMockLocation'); return result; } on PlatformException { return false; } } 對應的 Android 原生代碼(Kotlin): package com.example.app import android.content.Context import android.location.Location import android.location.LocationManager import android.os.Build import io...

[flutter]google_mobile_ads 安裝與使用範例

超完整 ✅ Flutter google_mobile_ads 安裝與使用範例來囉! 這套件用來整合 Google AdMob 廣告 ,支援 Banner、Interstitial(插頁)、Rewarded(獎勵) 廣告。 ✅ pubspec.yaml 安裝 dependencies: google_mobile_ads: ^5.1.0 ✅ Android 設定 (android/app/src/main/AndroidManifest.xml) 在 <application> 裡加入: < meta-data android:name = "com.google.android.gms.ads.APPLICATION_ID" android:value = "ca-app-pub-3940256099942544~3347511713" /> <!-- 測試 App ID --> 👉 注意:上線時換成你自己的 AdMob App ID ✅ iOS 設定 (ios/Runner/Info.plist) 加入: < key >GADApplicationIdentifier </ key > < string >ca-app-pub-3940256099942544~1458002511 </ string > <!-- 測試 App ID --> ✅ 初始化 (main.dart) import 'package:google_mobile_ads/google_mobile_ads.dart'; void main() { WidgetsFlutterBinding.ensureInitialized(); MobileAds.instance.initialize(); // 初始化廣告 SDK runApp(MyApp()); } ✅ Banner Ad 範例 class MyBannerAd extends StatefulWidget { @override State<MyBannerAd>...

[flutter]StreamBuilder 如何使用?

 在 Flutter 中使用 StreamBuilder StreamBuilder 是 Flutter 提供的一个小部件(widget),用于监听 Stream 并在数据更新时自动重建 UI。 🛠 基本用法 import 'dart:async'; import 'package:flutter/material.dart'; void main() { runApp(MaterialApp(home: StreamBuilderExample())); } class StreamBuilderExample extends StatefulWidget { @override _StreamBuilderExampleState createState() => _StreamBuilderExampleState(); } class _StreamBuilderExampleState extends State<StreamBuilderExample> { // 创建一个周期性 Stream,每秒钟发送一个数字 Stream<int> _counterStream() { return Stream.periodic(Duration(seconds: 1), (count) => count); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text("StreamBuilder 示例")), body: Center( child: StreamBuilder<int>( stream: _counterStream(), // 绑定 Stream initialData: 0, // 初始数据 builder: (context, snapshot) { if (snapshot.connectionState == Connec...

[flutter]showModalBottomSheet 最完整的 Flutter 範例

  showModalBottomSheet 用於在畫面底部彈出一個 模態(Modal)底部對話框 ,可用於顯示選項、表單或其他 UI 元件。 最基本的 showModalBottomSheet import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, home: HomeScreen(), ); } } class HomeScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('BottomSheet 範例')), body: Center( child: ElevatedButton( onPressed: () { showModalBottomSheet( context: context, builder: (BuildContext context) { return Container( padding: EdgeInsets.all(16), height: 200, child: Column( children: [ Text('這是 Bottom Sheet', style: TextStyle(fontSiz...

[flutter]如何在手機上測試 Flutter App

圖片
Flutter 支援 Android 和 iOS 實機測試,你可以透過 USB 連接手機,然後直接在手機上運行你的 Flutter 應用程式。 1. 準備環境 🛠 安裝必要工具 Flutter SDK ( 官方下載 ) Android Studio / VS Code (用於開發) Android 手機 / iPhone (實機測試) 🔹 確認 Flutter 安裝是否完整 : flutter doctor 如果有任何問題,請依照提示修復。 2. 在 Android 手機上測試 🔹 (1) 啟用 USB 偵錯 打開手機「開發者選項」 到 「設定」→「關於手機」 連續點擊 「版本號」 7 次,解鎖開發者模式 返回 「設定」→「系統」→「開發者選項」 開啟「USB 偵錯」 用 USB 連接手機 確保你的手機和電腦連接成功 選擇「允許 USB 偵錯」 確認設備是否可用 flutter devices 若成功,應該會顯示類似: 運行應用 flutter run ✅ 成功後,App 會自動安裝並在手機上運行! 3. 在 iPhone 上測試 🔹 (1) 準備 iOS 設備 安裝 Xcode (Mac 限定) sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer sudo xcodebuild -runFirstLaunch 用 USB 連接 iPhone 確保 信任此電腦 在 「設定」→「隱私權與安全性」→「開發者模式」 開啟 安裝 CocoaPods(如果尚未安裝) sudo gem install cocoapods 確認設備是否可用 flutter devices 如果顯示 iPhone,代表可用: 1 connected device: iPhone 13 Pro (mobile) • 00008110 -001 D50D21E90001E • ios • iOS 16.0 運行應用 flutter run ✅ 成功後,App 會出現在你的 iPhone 上! 4. 無線測試(不接 USB) 如果你不想每次都插 USB,可以使用 Wi-Fi 無線調試 : 🔹 (1) Android 在 Android Studio 中開啟「Device Manager」 選...

Kali防火墙ufw安装与命令

圖片
linux.kali=kali-linux-2020.1a-installer-amd64.iso 安装 ufw 防火墙 apt-get install ufw ufw 防火墙命令 ufw status :检查防火墙的状态(默认 inactive) ufw version :查看 ufw 防火墙版本 ufw enable :启动 ufw 防火墙 ufw disable :关闭ufw防火墙 ufw default deny :默认禁止访问所有 ufw allow 22/tcp :开放 22/tcp 端口 ufw allow 53 :开放53端口(tcp/udp) ufw deny 3306 :禁止3306访问 ufw delete allow 22 :删除已经添加过的规则 ufw allow from 192.168.8.1 :允许此IP访问所有的本机端口 ufw delete allow from 192.168.8.1 : 删除上面的规则 ufw status numbered :查看规则,显示行号 ufw delete 3 :删除第三条规则 ufw reload : 重新加载防火墙 ufw reset :重置防火墙