Skip to content

Commit

Permalink
Revert "Revert "Add Attribution.setOnesignalUserID (#3268)""
Browse files Browse the repository at this point in the history
This reverts commit bd91c89.
  • Loading branch information
Raquel10-RevenueCat committed Nov 14, 2023
1 parent bd91c89 commit b91b3c6
Show file tree
Hide file tree
Showing 8 changed files with 130 additions and 1 deletion.
16 changes: 15 additions & 1 deletion Sources/Purchasing/Purchases/Attribution.swift
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ public extension Attribution {

/**
* Subscriber attribute associated with the OneSignal Player ID for the user.
* Required for the RevenueCat OneSignal integration.
* Required for the RevenueCat OneSignal integration..
*
* #### Related Articles
* - [OneSignal RevenueCat Integration](https://docs.revenuecat.com/docs/onesignal)
Expand All @@ -239,6 +239,20 @@ public extension Attribution {
self.subscriberAttributesManager.setOnesignalID(onesignalID, appUserID: appUserID)
}

/**
* Subscriber attribute associated with the OneSignal User ID for the user.
* Deprecated. Use `setOnesignalID` instead.
*
* #### Related Articles
* - [OneSignal RevenueCat Integration](https://docs.revenuecat.com/docs/onesignal)
*
*- Parameter onesignalUserID: Empty String or `nil` will delete the subscriber attribute.
*/
@available(*, deprecated, message: "This API is not currently available. Contact support if you need to use it.")
@objc func setOnesignalUserID(_ onesignalUserID: String?) {
self.subscriberAttributesManager.setOnesignalUserID(onesignalUserID, appUserID: appUserID)
}

/**
* Subscriber attribute associated with the Airship Channel ID for the user.
* Required for the RevenueCat Airship integration.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ enum ReservedSubscriberAttribute: String {
case fBAnonID = "$fbAnonId"
case mpParticleID = "$mparticleId"
case oneSignalID = "$onesignalId"
case oneSignalUserID = "$onesignalUserId"
case airshipChannelID = "$airshipChannelId"
case cleverTapID = "$clevertapId"
case mixpanelDistinctID = "$mixpanelDistinctId"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,10 @@ class SubscriberAttributesManager {
setReservedAttribute(.oneSignalID, value: onesignalID, appUserID: appUserID)
}

func setOnesignalUserID(_ onesignalUserID: String?, appUserID: String) {
setReservedAttribute(.oneSignalUserID, value: onesignalUserID, appUserID: appUserID)
}

func setAirshipChannelID(_ airshipChannelID: String?, appUserID: String) {
setReservedAttribute(.airshipChannelID, value: airshipChannelID, appUserID: appUserID)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ + (void)checkAPI {
[a setMparticleID: @""];
[a setOnesignalID: nil];
[a setOnesignalID: @""];
[a setOnesignalUserID: nil];
[a setOnesignalUserID: @""];
[a setCleverTapID: nil];
[a setCleverTapID: @""];
[a setMixpanelDistinctID: nil];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ func checkAttributionAPI() {
attribution.setOnesignalID("")
attribution.setOnesignalID(nil)

attribution.setOnesignalUserID("")
attribution.setOnesignalUserID(nil)

attribution.setCleverTapID("")
attribution.setCleverTapID(nil)

Expand Down
12 changes: 12 additions & 0 deletions Tests/UnitTests/Mocks/MockSubscriberAttributesManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,18 @@ class MockSubscriberAttributesManager: SubscriberAttributesManager {
invokedSetOnesignalIDParametersList.append((onesignalID, appUserID))
}

var invokedSetOnesignalUserID = false
var invokedSetOnesignalUserIDCount = 0
var invokedSetOnesignalUserIDParameters: (onesignalUserID: String?, appUserID: String?)?
var invokedSetOnesignalUserIDParametersList = [(onesignalUserID: String?, appUserID: String?)]()

override func setOnesignalUserID(_ onesignalUserID: String?, appUserID: String) {
invokedSetOnesignalUserID = true
invokedSetOnesignalUserIDCount += 1
invokedSetOnesignalUserIDParameters = (onesignalUserID, appUserID)
invokedSetOnesignalUserIDParametersList.append((onesignalUserID, appUserID))
}

var invokedSetAirshipChannelID = false
var invokedSetAirshipChannelIDCount = 0
var invokedSetAirshipChannelIDParameters: (airshipChannelID: String?, appUserID: String?)?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,16 @@ class PurchasesSubscriberAttributesTests: TestCase {
.to(equal((nil, purchases.appUserID)))
}

func testSetAndClearOnesignalUserID() {
setupPurchases()
purchases.attribution.setOnesignalUserID("oneSig")
purchases.attribution.setOnesignalUserID(nil)
expect(self.mockSubscriberAttributesManager.invokedSetOnesignalUserIDParametersList[0])
.to(equal(("oneSig", purchases.appUserID)))
expect(self.mockSubscriberAttributesManager.invokedSetOnesignalUserIDParametersList[1])
.to(equal((nil, purchases.appUserID)))
}

func testSetAndClearAirshipChannelID() {
setupPurchases()
purchases.attribution.setAirshipChannelID("airship")
Expand Down Expand Up @@ -600,6 +610,16 @@ class PurchasesSubscriberAttributesTests: TestCase {
.currentAppUserID
}

func testSetOnesignalUserIDMakesRightCalls() {
setupPurchases()

Purchases.shared.attribution.setOnesignalUserID("123abc")
expect(self.mockSubscriberAttributesManager.invokedSetOnesignalUserIDCount) == 1
expect(self.mockSubscriberAttributesManager.invokedSetOnesignalUserIDParameters?.onesignalUserID) == "123abc"
expect(self.mockSubscriberAttributesManager.invokedSetOnesignalUserIDParameters?.appUserID) ==
mockIdentityManager.currentAppUserID
}

func testSetAirshipChannelIDMakesRightCalls() {
setupPurchases()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -915,6 +915,79 @@ class SubscriberAttributesManagerTests: TestCase {
checkDeviceIdentifiersAreNotSet()
}
// endregion
// region OnesignalUserID
func testSetOnesignalUserID() {
let onesignalUserID = "onesignalUserID"
self.subscriberAttributesManager.setOnesignalUserID(onesignalUserID, appUserID: "kratos")
expect(self.mockDeviceCache.invokedStoreCount) == 1
guard let invokedParams = self.mockDeviceCache.invokedStoreParameters else {
fatalError("no attributes received")
}
let receivedAttribute = invokedParams.attribute
expect(receivedAttribute.key) == "$onesignalUserId"
expect(receivedAttribute.value) == onesignalUserID
expect(receivedAttribute.isSynced) == false
}

func testSetOnesignalUserIDSetsEmptyIfNil() {
let onesignalUserID = "onesignalUserID"
self.subscriberAttributesManager.setOnesignalUserID(onesignalUserID, appUserID: "kratos")

self.subscriberAttributesManager.setOnesignalUserID(nil, appUserID: "kratos")

expect(self.mockDeviceCache.invokedStoreCount) == 2
guard let invokedParams = self.mockDeviceCache.invokedStoreParameters else {
fatalError("no attributes received")
}
let receivedAttribute = invokedParams.attribute
expect(receivedAttribute.key) == "$onesignalUserId"
expect(receivedAttribute.value) == ""
expect(receivedAttribute.isSynced) == false
}

func testSetOnesignalUserIDSkipsIfSameValue() {
let onesignalUserID = "onesignalUserID"

self.mockDeviceCache.stubbedSubscriberAttributeResult = SubscriberAttribute(withKey: "$onesignalUserId",
value: onesignalUserID)

self.subscriberAttributesManager.setOnesignalUserID(onesignalUserID, appUserID: "kratos")

expect(self.mockDeviceCache.invokedStoreCount) == 0
}

func testSetOnesignalUserIDOverwritesIfNewValue() {
let oldSyncTime = Date()
let onesignalUserID = "onesignalUserID"

self.mockDeviceCache.stubbedSubscriberAttributeResult = SubscriberAttribute(withKey: "$onesignalUserId",
value: "old_id",
isSynced: true,
setTime: oldSyncTime)

self.subscriberAttributesManager.setOnesignalUserID(onesignalUserID, appUserID: "kratos")

expect(self.mockDeviceCache.invokedStoreCount) == 1
guard let invokedParams = self.mockDeviceCache.invokedStoreParameters else {
fatalError("no attributes received")
}
let receivedAttribute = invokedParams.attribute
expect(receivedAttribute.key) == "$onesignalUserId"
expect(receivedAttribute.value) == onesignalUserID
expect(receivedAttribute.isSynced) == false
expect(receivedAttribute.setTime) > oldSyncTime
}

func testSetOnesignalUserIDDoesNotSetDeviceIdentifiers() {
let onesignalUserID = "onesignalUserID"
self.subscriberAttributesManager.setOnesignalUserID(onesignalUserID, appUserID: "kratos")
expect(self.mockDeviceCache.invokedStoreCount) == 1

expect(self.mockDeviceCache.invokedStoreParametersList.count) == 1

checkDeviceIdentifiersAreNotSet()
}
// endregion
// region AirshipChannelID
func testSetAirshipChannelID() throws {
let airshipChannelID = "airshipChannelID"
Expand Down

0 comments on commit b91b3c6

Please sign in to comment.