Skip to content

Commit 0cac26c

Browse files
authored
[PBE-6015] Add extra info to request client header (#1178)
* Add app name * Do not add header when creating socket (duplicated) * Use package name when app name is not provided
1 parent fa44c8d commit 0cac26c

File tree

6 files changed

+22
-18
lines changed

6 files changed

+22
-18
lines changed

demo-app/src/main/kotlin/io/getstream/video/android/util/StreamVideoInitHelper.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ object StreamVideoInitHelper {
206206
)
207207
authData.token
208208
},
209+
appName = "Stream Video Demo App",
209210
).build()
210211
}
211212
}

stream-video-android-core/api/stream-video-android-core.api

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -823,7 +823,8 @@ public final class io/getstream/video/android/core/StreamVideoBuilder {
823823
public fun <init> (Landroid/content/Context;Ljava/lang/String;Lio/getstream/video/android/core/GEO;Lio/getstream/video/android/model/User;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lio/getstream/video/android/core/logging/LoggingLevel;Lio/getstream/video/android/core/notifications/NotificationConfig;Lkotlin/jvm/functions/Function1;JZLjava/lang/String;ZLio/getstream/video/android/core/notifications/internal/service/CallServiceConfig;Ljava/lang/String;Lio/getstream/video/android/core/sounds/Sounds;Z)V
824824
public fun <init> (Landroid/content/Context;Ljava/lang/String;Lio/getstream/video/android/core/GEO;Lio/getstream/video/android/model/User;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lio/getstream/video/android/core/logging/LoggingLevel;Lio/getstream/video/android/core/notifications/NotificationConfig;Lkotlin/jvm/functions/Function1;JZLjava/lang/String;ZLio/getstream/video/android/core/notifications/internal/service/CallServiceConfig;Ljava/lang/String;Lio/getstream/video/android/core/sounds/Sounds;ZLio/getstream/video/android/core/permission/android/StreamPermissionCheck;)V
825825
public fun <init> (Landroid/content/Context;Ljava/lang/String;Lio/getstream/video/android/core/GEO;Lio/getstream/video/android/model/User;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lio/getstream/video/android/core/logging/LoggingLevel;Lio/getstream/video/android/core/notifications/NotificationConfig;Lkotlin/jvm/functions/Function1;JZLjava/lang/String;ZLio/getstream/video/android/core/notifications/internal/service/CallServiceConfig;Ljava/lang/String;Lio/getstream/video/android/core/sounds/Sounds;ZLio/getstream/video/android/core/permission/android/StreamPermissionCheck;I)V
826-
public synthetic fun <init> (Landroid/content/Context;Ljava/lang/String;Lio/getstream/video/android/core/GEO;Lio/getstream/video/android/model/User;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lio/getstream/video/android/core/logging/LoggingLevel;Lio/getstream/video/android/core/notifications/NotificationConfig;Lkotlin/jvm/functions/Function1;JZLjava/lang/String;ZLio/getstream/video/android/core/notifications/internal/service/CallServiceConfig;Ljava/lang/String;Lio/getstream/video/android/core/sounds/Sounds;ZLio/getstream/video/android/core/permission/android/StreamPermissionCheck;IILkotlin/jvm/internal/DefaultConstructorMarker;)V
826+
public fun <init> (Landroid/content/Context;Ljava/lang/String;Lio/getstream/video/android/core/GEO;Lio/getstream/video/android/model/User;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lio/getstream/video/android/core/logging/LoggingLevel;Lio/getstream/video/android/core/notifications/NotificationConfig;Lkotlin/jvm/functions/Function1;JZLjava/lang/String;ZLio/getstream/video/android/core/notifications/internal/service/CallServiceConfig;Ljava/lang/String;Lio/getstream/video/android/core/sounds/Sounds;ZLio/getstream/video/android/core/permission/android/StreamPermissionCheck;ILjava/lang/String;)V
827+
public synthetic fun <init> (Landroid/content/Context;Ljava/lang/String;Lio/getstream/video/android/core/GEO;Lio/getstream/video/android/model/User;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lio/getstream/video/android/core/logging/LoggingLevel;Lio/getstream/video/android/core/notifications/NotificationConfig;Lkotlin/jvm/functions/Function1;JZLjava/lang/String;ZLio/getstream/video/android/core/notifications/internal/service/CallServiceConfig;Ljava/lang/String;Lio/getstream/video/android/core/sounds/Sounds;ZLio/getstream/video/android/core/permission/android/StreamPermissionCheck;ILjava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
827828
public final fun build ()Lio/getstream/video/android/core/StreamVideo;
828829
}
829830

stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/StreamVideo.kt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -203,26 +203,26 @@ public interface StreamVideo : NotificationHandler {
203203
}
204204

205205
/**
206-
* Builds a detailed header of information we track around the SDK, Android OS, API Level, device name and
207-
* vendor and more.
206+
* Builds the client information header (X-Stream-Client) that will be added to requests.
208207
*
209-
* @return String formatted header that contains all the information.
208+
* @return Header value as a string.
210209
*/
211210
internal fun buildSdkTrackingHeaders(): String {
212-
val clientInformation = "stream-video-android-${BuildConfig.STREAM_VIDEO_VERSION}"
213-
214-
val buildModel = Build.MODEL
215-
val deviceManufacturer = Build.MANUFACTURER
216-
val apiLevel = Build.VERSION.SDK_INT
217-
val osName = "Android ${Build.VERSION.RELEASE}"
218-
219-
return clientInformation +
220-
"|os=$osName" +
221-
"|api_version=$apiLevel" +
222-
"|device_vendor=$deviceManufacturer" +
223-
"|device_model=$buildModel"
211+
val streamVideoVersion = "stream-video-android-${BuildConfig.STREAM_VIDEO_VERSION}"
212+
val os = "|os=Android ${Build.VERSION.RELEASE}"
213+
val apiVersion = "|api_version=${Build.VERSION.SDK_INT}"
214+
val deviceVendor = "|device_vendor=${Build.MANUFACTURER}"
215+
val deviceModel = "|device_model=${Build.MODEL}"
216+
val appName = buildAppName()
217+
218+
return streamVideoVersion + os + apiVersion + deviceVendor + deviceModel + appName
224219
}
225220

221+
private fun buildAppName(): String =
222+
(internalStreamVideo as? StreamVideoImpl)?.let { streamVideoImpl ->
223+
"|app_name=" + (streamVideoImpl.appName ?: streamVideoImpl.context.packageName)
224+
} ?: ""
225+
226226
/**
227227
* Uninstall a previous [StreamVideo] instance.
228228
*/

stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/StreamVideoBuilder.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ import java.net.ConnectException
7777
* @property permissionCheck Used to check for system permission based on call capabilities. See [StreamPermissionCheck].
7878
* @property crashOnMissingPermission Throw an exception or just log an error if [permissionCheck] fails.
7979
* @property audioUsage Used to signal to the system how to treat the audio tracks (voip or media).
80+
* @property appName Optional name for the application that is using the Stream Video SDK. Used for logging and debugging purposes.
8081
*
8182
* @see build
8283
* @see ClientState.connection
@@ -102,6 +103,7 @@ public class StreamVideoBuilder @JvmOverloads constructor(
102103
private val crashOnMissingPermission: Boolean = false,
103104
private val permissionCheck: StreamPermissionCheck = DefaultStreamPermissionCheck(),
104105
private val audioUsage: Int = defaultAudioUsage,
106+
private val appName: String? = null,
105107
) {
106108
private val context: Context = context.applicationContext
107109
private val scope = CoroutineScope(DispatcherProvider.IO)
@@ -199,6 +201,7 @@ public class StreamVideoBuilder @JvmOverloads constructor(
199201
permissionCheck = permissionCheck,
200202
crashOnMissingPermission = crashOnMissingPermission,
201203
audioUsage = audioUsage,
204+
appName = appName,
202205
)
203206

204207
if (user.type == UserType.Guest) {

stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/StreamVideoImpl.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ internal class StreamVideoImpl internal constructor(
156156
internal val permissionCheck: StreamPermissionCheck = DefaultStreamPermissionCheck(),
157157
internal val crashOnMissingPermission: Boolean = false,
158158
internal val audioUsage: Int = defaultAudioUsage,
159+
internal val appName: String? = null,
159160
) : StreamVideo, NotificationHandler by streamNotificationManager {
160161

161162
private var locationJob: Deferred<Result<String>>? = null

stream-video-android-core/src/main/kotlin/io/getstream/video/android/core/socket/PersistentSocket.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package io.getstream.video.android.core.socket
1818

1919
import io.getstream.log.taggedLogger
20-
import io.getstream.video.android.core.StreamVideo
2120
import io.getstream.video.android.core.dispatchers.DispatcherProvider
2221
import io.getstream.video.android.core.errors.VideoErrorCode
2322
import io.getstream.video.android.core.internal.network.NetworkStateProvider
@@ -277,7 +276,6 @@ public open class PersistentSocket<T>(
277276
.url(url)
278277
.addHeader("Connection", "Upgrade")
279278
.addHeader("Upgrade", "websocket")
280-
.addHeader("X-Stream-Client", StreamVideo.buildSdkTrackingHeaders())
281279
.build()
282280

283281
return httpClient.newWebSocket(request, this)

0 commit comments

Comments
 (0)