vpn_permission 0.0.2
vpn_permission: ^0.0.2 copied to clipboard
A Flutter plugin for managing VPN permission on Android and iOS.
vpn_permission #
A Flutter plugin to manage VPN permissions on Android and iOS.
Android: Automatically requests VPN permission via VpnService
.
iOS: Configures VPN profiles using NETunnelProviderManager
.
Features #
- Android: Auto-adds
BIND_VPN_SERVICE
permission (no setup required). - iOS: Triggers system dialogs for VPN configuration.
- Simple API for permission checks/requests.
Installation #
Add to pubspec.yaml
:
dependencies:
vpn_permission: ^0.0.1
Setup #
Android #
Nothing needed! The plugin automatically adds:
<uses-permission android:name="android.permission.BIND_VPN_SERVICE" />
iOS #
1. Add Capabilities
- Open your project in Xcode.
- For your main app target:
- Signing & Capabilities → + → App Groups (e.g.,
group.com.example.vpn
) - + → Network Extensions → Enable Packet Tunnel
- Signing & Capabilities → + → App Groups (e.g.,
2. Create VPN Extension
- File → New → Target → Network Extension → Packet Tunnel Provider
- Name:
VPNExtension
- Bundle ID:
com.example.vpn.VPNExtension
(match your app ID +.VPNExtension
)
3. Configure Extension
Repeat for VPNExtension
target:
- Same App Group as main app
- Network Extensions capability
Usage #
1. Import #
import 'package:vpn_permission/vpn_permission.dart';
2. Define Constants #
class AppConstants {
static const String iOSPackageName = "com.example.vpn";
static const String providerBundleIdentifier = "$iOSPackageName.VPNExtension";
static const String groupIdentifier = "group.$iOSPackageName";
static const String localizedDescription = "Free VPN - Fast & Secure";
}
3. Check/Request Permissions #
// Check permission
bool hasPermission = await VpnPermission.checkPermission();
// Request permission
if (!hasPermission) {
bool granted = await VpnPermission.requestPermission(
providerBundleIdentifier: AppConstants.providerBundleIdentifier,
groupIdentifier: AppConstants.groupIdentifier,
localizedDescription: AppConstants.localizedDescription,
);
print("Granted: $granted");
}
Contribution #
Issues/PRs welcome! Keep it simple.