Wireguard Transport
Adding Wireguard transport support
To enable Wireguard transport in your app, follow these steps:
Add the WireGuard Dependencies:
Open your app's build.gradle file.
Add the following dependencies to enable both the core SDK and Wireguard transport:
Groovy
Kotlin
sdk-core
: This is the main SDK needed for core VPN functionality.sdk-wireguard
: This is the module that adds Wireguard transport support to your VPN setup.
Create a List of Transport Configurations: Define which transport protocols the SDK should support (e.g., Hydra, Wireguard).
UnifiedSDK.update(transports, callback);
: Passes the list of transports to the SDK to enable them.
You can register both Hydra and Wireguard transports or just one, depending on your app's requirements.
Once the dependencies are added, register the Wireguard transport in the SDK configuration. This allows the SDK to use Wireguard as a transport option.
You can register both Hydra and Wireguard transports or just one of them.
Start a VPN session using the Wireguard transport.
Initialize the SDK and Configure the VPN Session: Use UnifiedSdk.getInstance() to get the SDK instance and set up the VPN session configuration, including the server location and the Wireguard transport protocol.
Start the VPN: Start the VPN session using sdk.getVpn().start().
UnifiedSdk.getInstance()
: Initializes the SDK with your clientInfo.SessionConfig.Builder()
: Configures the session with the VPN server location, reason for starting the VPN, and the transport protocol (Wireguard).sdk.getVpn().start()
: Starts the VPN session using the specified configuration.CompletableCallback
: Handles the success or failure of starting the VPN session.
Wireguard on Android 12+ (API 31+)
On Android 12 (API 31) and higher, apps that use exact alarms need user permission to function correctly. Since Wireguard transport uses exact alarms internally, you must check for this permission and request it before starting a VPN session.
Check if the Permission Is Needed: Use the following code to determine if exact alarm permissions are required and whether they are already granted:
Kotlin
If
shouldRequest
istrue
, you need to ask the user for permission.
Java
Build.VERSION.SDK_INT
andBuild.VERSION_CODES.S
: These Java constants are used to check the Android version (in this case, API level 31, Android 12).AlarmManager
: Cast the result ofgetSystemService()
toAlarmManager
for Java usage.
Request Permission
If permission is needed, launch the system settings activity to request the exact alarm permission:
Kotlin
Make sure to handle the case where the user denies the permission request. You can check the permission status again before starting the VPN session and inform the user if the permission is required for Wireguard transport to work properly.
Java
startActivity()
: In Java/Groovy, we use new Intent()
to create an intent and request permission to schedule exact alarms.
Checking Permission
Starting from Android 12+ (API 31+) (Android S+), apps that use exact alarms should request user permission. Wireguard transport internally uses exact alarms, so before using it on Android 12 or higher, you need to check if the permission was granted and request it if not before starting the VPN session.
Here's how to check for the permission and request it if needed:
Make sure to handle the case where the user denies the permission request. You can check the permission status again before starting the VPN session and inform the user if the permission is required for Wireguard transport to work properly.
Last updated