パッケージ、リポジトリ、アプリカテゴリを検索

パッケージ詳細v2.0.0

openvpn_flutter

FlutterでOpenVPNサービスに接続できるプラグイン

AndroidiOS
30日間ダウンロード
1250
いいね数
134
Pub ポイント
160

パッケージをインストール

flutter pub add openvpn_flutter

パッケージ概要

公開情報に基づく選定ガイドです。参考としてご利用ください。

openvpn_flutter パッケージは、Flutter アプリケーションが Android および iOS プラットフォーム上で OpenVPN サービスに接続できるようにします。VPN 接続を管理するための直感的なインターフェースを提供し、ユーザーがプログラム的に安全なネットワークトンネルを確立できるようにします。プラグインはネイティブ OpenVPN ライブラリを統合しており、標準的な OpenVPN 設定および .ovpn ファイルと互換性があります。プライベートネットワークへのアクセスやデータ保護の強化といったセキュアな接続機能をアプリに追加したい開発者向けに設計されています。

用途

  • セキュアなアプリケーションからサーバーへの通信
  • エンタープライズアプリケーションにおけるプライベートネットワークアクセス
  • 強化されたユーザー データのプライバシー
  • 地域コンテンツ制限を回避する
  • 企業用VPNへの接続

主な機能

  • Android および iOS プラットフォームをサポートしています
  • 標準の .ovpn 設定ファイルとの統合
  • プログラムによる接続管理
  • セキュアトンネルの確立
  • 軽量で統合が簡単

適している対象

  • エンタープライズモバイルアプリケーション
  • セキュアなネットワークアクセスを必要とするアプリ
  • プライバシーに焦点を当てたツールを開発する開発者
  • リモートサーバー接続が必要なアプリケーション
  • OpenVPNインフラストラクチャを使用するプロジェクト

注意事項

  • ネイティブOpenVPNライブラリ統合が必要
  • AndroidおよびiOSでは追加の権限が必要になる場合があります
  • 構成ファイルの取り扱いは安全でなければならない
  • OpenVPNプロトコルに限定
  • プラットフォーム固有のセットアップが必要になる場合があります

元の README

関連するソースリポジトリの README 原文のスナップショットです。最新の内容はリポジトリをご覧ください。

Connect to the OpenVPN service using Flutter. Contributions through issues and pull requests are highly appreciated!

Android Setup

1. Permission Handler
Java

Include the following code in the onActivityResult method of MainActivity.java (if you are using Java):

OpenVPNFlutterPlugin.connectWhileGranted(requestCode == 24 && resultCode == RESULT_OK);

The complete method should look like this:

...
import id.laskarmedia.openvpn_flutter.OpenVPNFlutterPlugin;
...

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    OpenVPNFlutterPlugin.connectWhileGranted(requestCode == 24 && resultCode == RESULT_OK);
    super.onActivityResult(requestCode, resultCode, data);
}
Kotlin

Include the following code in the onActivityResult method of MainActivity.kt (if you are using Kotlin):

OpenVPNFlutterPlugin.connectWhileGranted(requestCode == 24 && resultCode == RESULT_OK);

The complete method should look like this:

...
import id.laskarmedia.openvpn_flutter.OpenVPNFlutterPlugin
...
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    OpenVPNFlutterPlugin.connectWhileGranted(requestCode == 24 && resultCode == RESULT_OK)
    super.onActivityResult(requestCode, resultCode, data)
}
2. App Bundle Build Not Connecting

If you encounter issues with the app not connecting using the latest Flutter SDK, apply the following quick fix:

Ensure that you include the following attribute within the <application> tag in your AndroidManifest.xml file:

<application
    ...
    android:extractNativeLibs="true"
    ...>
</application>

iOS Setup

1. Add Capabilities

Add the App Groups and Network Extensions capabilities to the Runner's target. Refer to the image below for detailed instructions:

2. Add New Target

Click the + button on the bottom left, choose NETWORK EXTENSION, and follow the instructions in the image below:

Add the same capabilities to the VPNExtension as you did for the Runner's target:

3. Copy and Paste

Add the following lines to your Podfile (ios/Podfile):

target 'VPNExtension' do
  use_frameworks!
  pod 'OpenVPNAdapter', :git => 'https://github.com/ss-abramchuk/OpenVPNAdapter.git', :tag => '0.8.0'
end

Open VPNExtension > PacketTunnelProvider.swift and copy-paste the script from PacketTunnelProvider.swift.

Note

You must use iOS devices instead of the simulator to connect.

Recipe

Initialize

Before starting, initialize the OpenVPN plugin:

late OpenVPN openvpn;

@override
void initState() {
    openvpn = OpenVPN(onVpnStatusChanged: _onVpnStatusChanged, onVpnStageChanged: _onVpnStageChanged);
    openvpn.initialize(
        groupIdentifier: "GROUP_IDENTIFIER", ///Example 'group.com.laskarmedia.vpn'
        providerBundleIdentifier: "NETWORK_EXTENSION_IDENTIFIER", ///Example 'id.laskarmedia.openvpnFlutterExample.VPNExtension'
        localizedDescription: "LOCALIZED_DESCRIPTION" ///Example 'Laskarmedia VPN'
    );
}

void _onVpnStatusChanged(VPNStatus? vpnStatus){
    setState((){
        this.status = vpnStatus;
    });
}

void _onVpnStageChanged(VPNStage? stage){
    setState((){
        this.stage = stage;
    });
}
Connect to VPN
void connect() {
  openvpn.connect(
    config,
    name,
    username: username,
    password: password,
    bypassPackages: [],
    // In iOS connection can get stuck in "connecting" if this flag is "false". 
    // Solution is to switch it to "true".
    certIsRequired: false,
  );
}
Disconnect
void disconnect(){
    openvpn.disconnect();
}

Publishing to Play Store and App Store

Android
  1. You can use app bundles to publish the app.
  2. Add the following to your files in the android folder (special thanks to https://github.com/nizwar/openvpn_flutter/issues/10). Otherwise, the connection may not be established in some cases and will silently report "disconnected" when trying to connect. This is likely related to some symbols being stripped by Google Play.
gradle.properties > android.bundle.enableUncompressedNativeLibs=false
AndroidManifest > android:extractNativeLibs="true" in the application tag

Add the following inside the android tag in app/build.gradle:

android {
    ...
    //from here ======
    lintOptions {
        disable 'InvalidPackage'
        checkReleaseBuilds false
    }

    packagingOptions {
        jniLibs {
            useLegacyPackaging = true
        }
    }

    bundle {
        language {
            enableSplit = false
        }
        density {
            enableSplit = false
        }
        abi {
            enableSplit = false
        }
    }
    //to here
    ...
}
Notifications

As the plugin shows notifications for connection status and connection details, you must request permission using third-party packages.

Example using permission_handler:

///Put it anywhere you wish, like once you initialize the VPN or pre-connect to the server
Permission.notification.isGranted.then((_) {
  if (!_) Permission.notification.request();
});
iOS
  1. View Apple Guidelines relating to VPN.
  2. This plugin DOES use encryption, but it uses exempt encryptions.

Licenses

Support

If you appreciate my work, don't forget to give a thumbs up or support me with a cup of coffee.

カテゴリー

ソースリポジトリ

このパッケージを使用しているプロジェクト

データはまだありません。