2. Register both or one transport with SDK config:
List<TransportConfig> transports = new ArrayList<>();
transports.add(HydraTransportConfig.create());
transports.add(WireTransportConfig.create());
UnifiedSDK.update(transportConfigs, callback);
3. Specify transport on VPN start:
final SessionInfo session = new SessionConfig.Builder()
.withLocation(UnifiedSDK.COUNTRY_OPTIMAL)
.withReason(TrackingConstants.GprReasons.M_UI)
.withTransport(WireguardTransport.TRANSPORT_ID)
.build();
sdk.getVpn().start(session, new CompletableCallback() {
@Override
public void complete() {
}
@Override
public void error(@NonNull VpnException e) {
}
});
Wireguard on Android S+
Starting from Android 31 apps that use exact alarm should request user permission to do so. Wireguard transport internally uses exact alarms, so before using it on Android 31+ you need to check if permission was granted and request that permission if not before starting vpn session
val shouldRequest = VERSION.SDK_INT >= VERSION_CODES.S &&
!getSystemService(AlarmManager::class.java).canScheduleExactAlarms()
if (VERSION.SDK_INT >= VERSION_CODES.S) {
startActivity(Intent(Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM))
}