flutter_openvpn

Creator: coderz1093

Last updated:

Add to Cart

Description:

flutter openvpn

flutter_openvpn #
A new Flutter plugin that uses OpenVpn.
Installation #

Depend on it
Add this to your package's pubspec.yaml file:

dependencies:
flutter_openvpn: ^0.2.0

copied to clipboard

Install it
You can install packages from the command line:

with Flutter:
$ flutter pub get
copied to clipboard
Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

Import it
Now in your Dart code, you can use:

import 'package:flutter_openvpn/flutter_openvpn.dart';
copied to clipboard
Supported Platforms #

22 >= Android
9.0 >= iOS

Build project first #

After adding package to pubspec.yaml, Run build command

flutter build apk --debug //for android
flutter build ios --no-codesign //for ios
copied to clipboard
Ignore any build errors.
Android integration #

Change minimum sdk to 22 :


Open Your project in Android Studio.
Open your MainActivity.java(or .kt for kotlin) file
(Located in android/app/src/main/YOUR_PACKAGE_NAME/MainActivity)
Override onActivityResult in your activity and add this code to function body

if (requestCode == 1) {
if (resultCode == RESULT_OK) {
FlutterOpenvpnPlugin.setPermission(true);
} else {
FlutterOpenvpnPlugin.setPermission(false);
}
}
copied to clipboard

Finally import FlutterOpenVpn with this import statement

import com.topfreelancerdeveloper.flutter_openvpn.FlutterOpenvpnPlugin;
copied to clipboard
iOS integration #

Add VPN Entitlements


Open ios/Runner.xcworkspace in xcode
In Runner target -> Signing & Capabalities -> Click on "+ Capabality" button
Add both "Network Extension" and "App Groups" capabalities
Select ONLY "Packet Tunnel" form newly created Network Extension menu.
Make sure your Bundle identifier is checked in App Groups.
View This Screenshot for visual Guide


Add Network Extension Target


Below Runner target click on "+" button to add new target
Search for "Network Extension" in newly opened page and click on next
Give it a name(Without space) and make sure to select Swift as Language and Packet Tunnel as Provider Type.
Click on finish and agree to any message relating to "Activating Extension"
Repeat "Add VPN Entitlements" for newly created target as well
View This Screenshot for visual Guide


Change minimum platform target to iOS 9.0 :


In Runner target -> Deployment Info -> change Target to iOS 9.0
Repeat step 2 for your VPN Extension Target as well


Add OpenVPNAdapter dependency to PodFile


Open ios/PodFile
Change your PodFile according to this:

.
.
.
target 'Runner' do
use_frameworks!
use_modular_headers!

flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end

//Add this part
target 'YOUR_TARGET_EXTENSION_NAME' do
use_frameworks!
use_modular_headers!
pod 'OpenVPNAdapter', :git => 'https://github.com/ss-abramchuk/OpenVPNAdapter.git', :tag => '0.7.0'
end
.
.
.
copied to clipboard

Run 'pod install' command in /ios directory


Disable Bitcode


In Vpn Extension Target -> Build Settings
Search for "Bitcode" and set it to NO


Add code to PacketTunnelProvider


Open VPNExtension folder/PacketTunnelProvider.swift in xcode.
Replace all code with this and save

Dart/Flutter integration #

Initilize plugin

FlutterOpenvpn.init(
localizedDescription: "ExampleVPN", //this is required only on iOS
providerBundleIdentifier: "com.topfreelancerdeveloper.flutterOpenvpnExample.RunnerExtension",//this is required only on iOS
//localizedDescription is the name of your VPN profile
//providerBundleIdentifier is the bundle id of your vpn extension
)
/* returns {"currentStatus" : "VPN_CURRENT_STATUS",
"expireAt" : "VPN_EXPIRE_DATE_STRING_IN_FORMAT(yyyy-MM-dd HH:mm:ss)",} if successful
returns null if failed
*/
copied to clipboard
View this for more info on VPN status Strings

Add VPN Profile and connect

FlutterOpenvpn.lunchVpn(
ovpnFileContent, //content of your .ovpn file
(isProfileLoaded) => print('isProfileLoaded : $isProfileLoaded'),
(newVpnStatus) => print('vpnActivated : $newVpnStatus'),
expireAt: DateTime.now().add(Duration(seconds: 30)),
//(Optional) VPN automatically disconnects in next 30 seconds
)
copied to clipboard
Publishing to Play Store and App Store #
Android #
. Recently I discovered an issue with plugin not working with appbundles
. If you want to publish to play store use apks
. view this issue to stay updated on the matter
iOS #
. View Apple Guidelines Relating to VPN
. This plugin DOES use Encryption BUT, It uses Exempt Encryptions

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files:

Customer Reviews

There are no reviews.