flutter_openvpn 0.1.1 flutter_openvpn: ^0.1.1 copied to clipboard
Flutter OpenVPN uses OpenVpn Protocol to connect with ovpn file configurations.
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.1.1
- Install it You can install packages from the command line:
with Flutter:
$ flutter pub get
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';
Supported Platforms #
22
>= Android9.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
Ignore any build errors.
Android integration #
- Change minimum sdk to 22 :
- Open app level build.gradle file (android/app/build.gradle)
- In android->defaultConfig scope change this line
defaultConfig {
.
.
.
minSdkVersion 22 //default is 16
.
.
.
}
iOS integration #
- Add OpenVPNAdapter dependency to PodFile
- Open ios/PodFile
- Change your PodFile according to this:
.
.
.
pod 'Flutter', :path => 'Flutter'
pod 'OpenVPNAdapter', :git => 'https://github.com/ss-abramchuk/OpenVPNAdapter.git', :tag => '0.6.0' //add this line
.
.
.
- Run 'pod install' command in /ios directory
- 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 OpenVPNAdpter dependency to VPNExtension Target
- Click on your VPNExtension Target
- Select General tab
- In Frameworks and Libraries section click on + button
- Search for "OpenVPNAdapter.framework" and click on Add
- Select "Do Not Embed" in OpenVPNAdapter.framework Embed Options
- View This Screenshot for visual Guide
- 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
*/
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
)
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