Skip to content

网络

免费插件

此插件免费开源,采用 MIT 许可证。

概述

Network API 提供跨平台的网络连接状态检测,包括连接类型和计量状态。

安装

shell
composer require nativephp/mobile-network

使用

PHP (Livewire/Blade)

php
use Native\Mobile\Facades\Network;

// 获取当前网络状态
$status = Network::status();

if ($status->connected) {
    echo "已连接:" . $status->type;

    if ($status->isExpensive) {
        echo " (计量连接)";
    }
} else {
    echo "无网络连接";
}

JavaScript (Vue/React/Inertia)

js
import { network } from '#nativephp';

// 获取当前网络状态
const status = await network.status();

if (status.connected) {
    console.log(`已连接:${status.type}`);

    if (status.isExpensive) {
        console.log('警告:计量连接');
    }
} else {
    console.log('无网络连接');
}

响应对象

status() 方法返回包含以下属性的对象:

属性类型描述
connectedboolean设备是否有网络连接
typestring连接类型:wificellularethernetunknown
isExpensiveboolean连接是否计量(如蜂窝数据)
isConstrainedboolean是否启用低数据模式(仅 iOS)

示例

条件数据同步

php
use Native\Mobile\Facades\Network;

public function syncData()
{
    $status = Network::status();

    if (!$status->connected) {
        Dialog::toast('无网络连接');
        return;
    }

    if ($status->isExpensive) {
        // 蜂窝网络 - 仅同步必要数据
        $this->syncEssentialData();
    } else {
        // WiFi - 完整同步
        $this->syncAllData();
    }
}

JavaScript 连接检查

js
import { network, dialog } from '#nativephp';

async function downloadLargeFile() {
    const status = await network.status();

    if (!status.connected) {
        dialog.toast('无网络连接');
        return;
    }

    if (status.isExpensive && status.type === 'cellular') {
        // 警告用户蜂窝网络下载大文件
        dialog.alert(
            '大文件下载',
            '此文件为 50MB。是否在蜂窝数据下下载?',
            ['取消', '下载']
        );
        return;
    }

    // 继续下载
    startDownload();
}

平台行为

Android

  • 使用 ConnectivityManagerNetworkCapabilities
  • isConstrained 始终为 false(不适用)
  • 需要 ACCESS_NETWORK_STATE 权限(自动添加)

iOS

  • 使用 Network 框架的 NWPathMonitor
  • isConstrained 反映低数据模式设置
  • 无需特殊权限

基于 NativePHP 官方文档翻译