Skip to content

Commit d4f5307

Browse files
AR Abdul Azeezcursoragent
andcommitted
fix: remove composite login from the public API
The profile login still has open bugs, so apps should not be able to call it yet. login(externalId) is unchanged. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent edfe844 commit d4f5307

12 files changed

Lines changed: 5 additions & 228 deletions

File tree

‎OneSignalSDK/onesignal/core/api/core.api‎

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ public abstract interface class com/onesignal/IOneSignal {
5858
public abstract fun initWithContextSuspend (Landroid/content/Context;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
5959
public abstract fun isInitialized ()Z
6060
public abstract fun login (Ljava/lang/String;)V
61-
public abstract fun login (Ljava/lang/String;Lcom/onesignal/OneSignalUserProfile;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
6261
public abstract fun login (Ljava/lang/String;Ljava/lang/String;)V
6362
public abstract fun loginSuspend (Ljava/lang/String;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
6463
public abstract fun logout ()V
@@ -77,7 +76,6 @@ public abstract interface class com/onesignal/IOneSignal {
7776
public final class com/onesignal/IOneSignal$DefaultImpls {
7877
public static synthetic fun initWithContextSuspend$default (Lcom/onesignal/IOneSignal;Landroid/content/Context;Ljava/lang/String;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
7978
public static fun login (Lcom/onesignal/IOneSignal;Ljava/lang/String;)V
80-
public static synthetic fun login$default (Lcom/onesignal/IOneSignal;Ljava/lang/String;Lcom/onesignal/OneSignalUserProfile;Ljava/lang/String;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
8179
public static synthetic fun login$default (Lcom/onesignal/IOneSignal;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)V
8280
public static synthetic fun loginSuspend$default (Lcom/onesignal/IOneSignal;Ljava/lang/String;Ljava/lang/String;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
8381
}
@@ -133,10 +131,7 @@ public final class com/onesignal/OneSignal {
133131
public static synthetic fun initWithContextSuspend$default (Landroid/content/Context;Ljava/lang/String;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
134132
public static final fun isInitialized ()Z
135133
public static final fun login (Ljava/lang/String;)V
136-
public static final fun login (Ljava/lang/String;Lcom/onesignal/OneSignalUserProfile;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
137-
public static final fun login (Ljava/lang/String;Lcom/onesignal/OneSignalUserProfile;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
138134
public static final fun login (Ljava/lang/String;Ljava/lang/String;)V
139-
public static synthetic fun login$default (Ljava/lang/String;Lcom/onesignal/OneSignalUserProfile;Ljava/lang/String;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
140135
public static synthetic fun login$default (Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)V
141136
public static final fun loginSuspend (Ljava/lang/String;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
142137
public static synthetic fun loginSuspend$default (Ljava/lang/String;Ljava/lang/String;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;

‎OneSignalSDK/onesignal/core/src/main/java/com/onesignal/IOneSignal.kt‎

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -250,16 +250,6 @@ interface IOneSignal {
250250
jwtBearerToken: String? = null,
251251
)
252252

253-
/**
254-
* Login with [externalId] plus [profile] as one Create User upsert (anonymous is not merged). Email/SMS create or transfer; a foreign alias fails it.
255-
* Same id is a no-op once a backend ID exists. Backend failure leaves this identity local; INVALID_ARGUMENT and NOT_INITIALIZED change nothing.
256-
*/
257-
suspend fun login(
258-
externalId: String?,
259-
profile: OneSignalUserProfile,
260-
jwtBearerToken: String? = null,
261-
): OneSignalResult<LoginData>
262-
263253
/**
264254
* Logout the current user (suspend version).
265255
*/

‎OneSignalSDK/onesignal/core/src/main/java/com/onesignal/OneSignal.kt‎

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -424,18 +424,6 @@ object OneSignal {
424424
oneSignal.loginSuspend(externalId, jwtBearerToken)
425425
}
426426

427-
/**
428-
* Login with [externalId] plus [profile] as one Create User upsert (anonymous is not merged). Email/SMS create or transfer; a foreign alias fails it.
429-
* Same id is a no-op once a backend ID exists. Backend failure leaves this identity local; INVALID_ARGUMENT and NOT_INITIALIZED change nothing.
430-
*/
431-
@JvmStatic
432-
@JvmOverloads
433-
suspend fun login(
434-
externalId: String?,
435-
profile: OneSignalUserProfile,
436-
jwtBearerToken: String? = null,
437-
): OneSignalResult<LoginData> = oneSignal.login(externalId, profile, jwtBearerToken)
438-
439427
/**
440428
* Logout the current user without blocking the calling thread.
441429
* Suspends until the SDK is initialized if initialization is in progress.

‎OneSignalSDK/onesignal/core/src/main/java/com/onesignal/OneSignalResult.kt‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ import org.json.JSONObject
2323
*
2424
* From Kotlin, inside a coroutine:
2525
* ```kotlin
26-
* val result = OneSignal.login("user-123", OneSignalUserProfile.builder().setEmail("a@b.co").build())
27-
* if (result.isSuccess) println(result.data?.onesignalId) else println(result.error?.first?.code)
26+
* if (result.isSuccess) println(result.data) else println(result.error?.first?.code)
2827
* ```
2928
*
3029
* From Java the generated accessors read naturally:

‎OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -851,10 +851,10 @@ internal class OneSignalImp : IOneSignal,
851851
loginHelper.enqueueLogin(context)
852852
}
853853

854-
override suspend fun login(
854+
suspend fun login(
855855
externalId: String?,
856856
profile: OneSignalUserProfile,
857-
jwtBearerToken: String?,
857+
jwtBearerToken: String? = null,
858858
): OneSignalResult<LoginData> =
859859
withContext(ioDispatcher) {
860860
Logging.log(LogLevel.DEBUG, "login(externalId: $externalId, profile: $profile, jwtBearerToken: ...${jwtBearerToken?.takeLast(8)})")

‎OneSignalSDK/onesignal/core/src/test/java/com/onesignal/OneSignalSuspendMethodsExistTest.kt‎

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ class OneSignalSuspendMethodsExistTest : FunSpec({
157157
assert(blocking.any { it.parameters.size == 3 }) { "login(externalId, jwtBearerToken) is missing" }
158158
}
159159

160-
test("suspend login with profile exists and returns OneSignalResult") {
160+
test("suspend login with a profile is not on the public object") {
161161
val kFunction =
162162
OneSignal::class.memberFunctions
163163
.firstOrNull { fn ->
@@ -166,10 +166,7 @@ class OneSignalSuspendMethodsExistTest : FunSpec({
166166
fn.parameters.any { it.type.classifier == OneSignalUserProfile::class }
167167
}
168168

169-
assert(kFunction != null) { "suspend login(externalId, profile) not found" }
170-
assert(kFunction!!.returnType.classifier == OneSignalResult::class) {
171-
"suspend login(externalId, profile) should return OneSignalResult"
172-
}
169+
assert(kFunction == null) { "suspend login(externalId, profile) is still public" }
173170
}
174171

175172
test("logoutSuspend exists with no parameters") {

‎examples/demo/app/src/main/java/com/onesignal/example/data/model/CompositeLoginExample.java‎

Lines changed: 0 additions & 27 deletions
This file was deleted.

‎examples/demo/app/src/main/java/com/onesignal/example/data/repository/OneSignalRepository.kt‎

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.onesignal.example.data.repository
22

33
import com.onesignal.OneSignal
4-
import com.onesignal.example.data.model.CompositeLoginExample
54
import com.onesignal.example.data.model.NotificationType
65
import com.onesignal.example.data.network.OneSignalService
76
import com.onesignal.example.data.network.UserData
@@ -22,19 +21,6 @@ class OneSignalRepository {
2221
DemoLog.d("Logged in user with onesignalId: ${OneSignal.User.onesignalId}")
2322
}
2423

25-
suspend fun loginUserWithProfile(
26-
externalUserId: String,
27-
email: String?,
28-
sms: String?,
29-
jwtToken: String? = null,
30-
) = withContext(Dispatchers.IO) {
31-
DemoLog.d("Composite login externalUserId: $externalUserId email=$email sms=$sms")
32-
val profile = CompositeLoginExample.profile(email, sms)
33-
val result = OneSignal.login(externalUserId, profile, jwtToken)
34-
DemoLog.d("Composite login result: $result")
35-
result
36-
}
37-
3824
suspend fun updateUserJwt(externalUserId: String, jwtToken: String) = withContext(Dispatchers.IO) {
3925
DemoLog.d("Updating JWT for externalUserId: $externalUserId")
4026
OneSignal.updateUserJwt(externalUserId, jwtToken)

‎examples/demo/app/src/main/java/com/onesignal/example/ui/components/Dialogs.kt‎

Lines changed: 0 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -465,102 +465,6 @@ fun LoginDialog(
465465
)
466466
}
467467

468-
@Composable
469-
fun CompositeLoginDialog(
470-
onDismiss: () -> Unit,
471-
onConfirm: (externalId: String, email: String?, sms: String?, jwt: String?) -> Unit,
472-
) {
473-
var externalId by remember { mutableStateOf("") }
474-
var email by remember { mutableStateOf("") }
475-
var sms by remember { mutableStateOf("") }
476-
var jwtToken by remember { mutableStateOf("") }
477-
478-
AlertDialog(
479-
onDismissRequest = onDismiss,
480-
modifier = Modifier.fillMaxWidth().padding(horizontal = DemoLayout.pagePadding).exposeTestTagsAsResourceId(),
481-
properties = DialogProperties(usePlatformDefaultWidth = false),
482-
title = {
483-
DialogTitle("Login With Profile")
484-
},
485-
text = {
486-
Column {
487-
OutlinedTextField(
488-
value = externalId,
489-
onValueChange = { externalId = it },
490-
label = { Text("External User Id") },
491-
modifier = Modifier
492-
.fillMaxWidth()
493-
.testTag("composite_login_user_id_input"),
494-
singleLine = true,
495-
shape = TextFieldShape,
496-
colors = dialogTextFieldColors()
497-
)
498-
Spacer(modifier = Modifier.height(12.dp))
499-
OutlinedTextField(
500-
value = email,
501-
onValueChange = { email = it },
502-
label = { Text("Email (optional)") },
503-
modifier = Modifier
504-
.fillMaxWidth()
505-
.testTag("composite_login_email_input"),
506-
singleLine = true,
507-
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email),
508-
shape = TextFieldShape,
509-
colors = dialogTextFieldColors()
510-
)
511-
Spacer(modifier = Modifier.height(12.dp))
512-
OutlinedTextField(
513-
value = sms,
514-
onValueChange = { sms = it },
515-
label = { Text("SMS (optional)") },
516-
modifier = Modifier
517-
.fillMaxWidth()
518-
.testTag("composite_login_sms_input"),
519-
singleLine = true,
520-
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Phone),
521-
shape = TextFieldShape,
522-
colors = dialogTextFieldColors()
523-
)
524-
Spacer(modifier = Modifier.height(12.dp))
525-
OutlinedTextField(
526-
value = jwtToken,
527-
onValueChange = { jwtToken = it },
528-
label = { Text("JWT Token (optional)") },
529-
modifier = Modifier
530-
.fillMaxWidth()
531-
.testTag("composite_login_jwt_input"),
532-
singleLine = true,
533-
shape = TextFieldShape,
534-
colors = dialogTextFieldColors()
535-
)
536-
}
537-
},
538-
confirmButton = {
539-
TextButton(
540-
onClick = {
541-
onConfirm(
542-
externalId,
543-
email.ifBlank { null },
544-
sms.ifBlank { null },
545-
jwtToken.ifBlank { null },
546-
)
547-
},
548-
enabled = externalId.isNotBlank(),
549-
modifier = Modifier.testTag("composite_login_confirm_button"),
550-
colors = dialogTextButtonColors(),
551-
) {
552-
DialogActionLabel("Login")
553-
}
554-
},
555-
dismissButton = {
556-
TextButton(onClick = onDismiss, colors = dialogTextButtonColors()) {
557-
DialogActionLabel("Cancel")
558-
}
559-
},
560-
shape = DialogShape
561-
)
562-
}
563-
564468
/**
565469
* Dialog for outcome selection and input.
566470
*/

‎examples/demo/app/src/main/java/com/onesignal/example/ui/main/MainScreen.kt‎

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,6 @@ fun MainScreen(viewModel: MainViewModel) {
151151
onUseIdentityVerificationChange = { viewModel.setUseIdentityVerification(it) },
152152
onLanguageChange = { viewModel.setLanguage(it) },
153153
onLogin = { userId, jwt -> viewModel.loginUser(userId, jwt) },
154-
onLoginWithProfile = { userId, email, sms, jwt ->
155-
viewModel.loginUserWithProfile(userId, email, sms, jwt)
156-
},
157154
onLogout = { viewModel.logoutUser() },
158155
onUpdateJwt = { externalId, token -> viewModel.updateUserJwt(externalId, token) },
159156
isLoading = isLoading

0 commit comments

Comments
 (0)