Artifact | Version |
---|---|
attribution |
1.6.26 |
- Affise Unity package
- Description
- Features
- ProviderType identifiers collection
- Event send control
- Events tracking
- Predefined event parameters
- Events buffering
- Push token tracking
- Deeplinks / Applink
- Offline mode
- Disable tracking
- Disable background tracking
- Get random user Id
- Get random device Id
- Get providers
- Is first run
- Get referrer
- Get referrer value
- Get referrer on server
- Get referrer on server parameter
- Referrer keys
- Get module state
- Platform specific
- SDK to SDK integrations
- Debug
- Troubleshoots
Affise SDK is a software you can use to collect app usage statistics, device identifiers, deeplink usage, track install referrer.
Open Package Manager(Window / Package Manager
)
Add package from git url https://github.com/affise/sdk-unity.git
Download latest Affise SDK attribution-1.6.26.unitypackage
from releases page and drop this file to unity editor
After package is added to unity project, initialize affise settings.
Open Project Settings(Edit / Project Settings
)
On Affise tab click Create
button.
This will create Affise Settings.asset
in Assets / Affise / Resources
directory.
Note
π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦
Settings set in
Edit / Project Settings / Affise
are marked asActive Settings
Affise is using settings marked as
Active Settings
located in root of folder
Resources
which can be located in any folderExample
<Any folder> / Resources / <Your affise settings>.asset
π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦π¦
Warning
π§π§π§π§π§π§π§π§π§π§π§π§π§π§π§
Settings located in
Editor
folder are invalid.Example:
Editor / Resources / <Your affise settings>.asset
π§π§π§π§π§π§π§π§π§π§π§π§π§π§π§
Fill all required fields
Set SDK server domain:
- Open
Edit / Project Settings / Affise
- Unfold
Optional
section at the bottom - Fill
Domain
field
Demo app AffiseDemo.cs
Affise
.Settings(
affiseAppId: "Your appId", //Change to your app id
secretKey: "Your SDK secretKey" //Change to your SDK secretKey
)
.Start(); // Start Affise SDK
Set SDK server domain:
Affise
.Settings(
affiseAppId: "Your appId",
secretKey: "Your SDK secretKey"
)
.setDomain("https://YoureCustomDomain/") // Set custom domain
.Start(); // Start Affise SDK
Warning
π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯
Please make sure your credentials are valid
Visit section validation credentials
π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯
Affise Advertising module uses AppTrackingTransparency
framework to get advertisingIdentifier
For working functionality your app needs to declare NSUserTrackingUsageDescription
permission:
Key NSUserTrackingUsageDescription
value is set in Edit / Project Settings / Affise / Modules
Key added automatically then module Advertising
is selected
Default value is empty string ""
Open Edit / Project Settings / Affise
On Modules
tab select all required
If module start type
is manual
, then call is code:
Affise.Module.ModuleStart(AffiseModules.Advertising);
Get list of installed modules:
Affise.Module.GetModulesInstalled()
All affise modules is updated automatically on build
Warning
No manual editing is reqired
Module | Version | Start |
---|---|---|
Advertising |
Auto |
|
AndroidId |
Auto |
|
Link |
Auto |
|
Network |
Auto |
|
Phone |
Auto |
|
Status |
Auto |
Dependencies located in Android project gradle file build.gradle
final affise_version = '1.6.47'
dependencies {
// ...
// Affise modules
implementation "com.affise:module-advertising:$affise_version"
implementation "com.affise:module-androidid:$affise_version"
implementation "com.affise:module-link:$affise_version"
implementation "com.affise:module-network:$affise_version"
implementation "com.affise:module-phone:$affise_version"
implementation "com.affise:module-status:$affise_version"
implementation "com.affise:module-subscription:$affise_version"
}
All affise modules is updated automatically on build
Warning
No manual editing is reqired
Module | Version | Start |
---|---|---|
Advertising |
1.6.42 |
Manual |
Link |
1.6.42 |
Auto |
Status |
1.6.42 |
Auto |
Dependencies located in XCode project folder Podfile
platform :ios, '11.0'
target 'UnityFramework' do
pod 'AffiseInternal', '1.6.42'
# Affise Modules
pod 'AffiseModule/Advertising', `1.6.42`
pod 'AffiseModule/Link', '~> 1.6.42'
pod 'AffiseModule/Status', `1.6.42`
end
target 'Unity-iPhone' do
end
use_frameworks! :linkage => :static
This module required to Use IDFA
(Identifier for advertisers)
Warning
π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯
Module Advertising requires
NSUserTrackingUsageDescription
key ininfo.plist
Application will crash if key not present
Key
NSUserTrackingUsageDescription
value is set inEdit / Project Settings / Affise / Modules
Key added automatically then module
Advertising
is selectedDefault value is empty string ""
π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯
Or Manual open info.plist
and add key NSUserTrackingUsageDescription
with string value. For more information read requirements
Return last url in chan of redirection
π₯Support MAX 10 redirectionsπ₯
Affise.Module.LinkResolve("SITE_WITH_REDIRECTION", (redirectUrl) => {
// handle redirect url
});
Warning
π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯
If
getStatus
return an error or working more than 2 minutesPlease see section validation credentials
π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯
Affise.Module.GetStatus(AffiseModules.Status, response => {
// handle response
});
Get products by ids:
var ids = new List<AffiseProduct> {
"exampple.product.id_1",
"exampple.product.id_2",
};
Affise.Module.FetchProducts(ids, (result) =>
{
if (result.IsSuccess)
{
var value = result.AsSuccess;
var products = value.Products;
var invalidIds = value.InvalidIds;
}
else
{
var error = result.AsFailure;
}
});
Purchase product:
// Specify product type for correct affise event
Affise.Module.Purchase(product, AffiseProductType.CONSUMABLE, (result) =>
{
if (result.IsSuccess)
{
AffisePurchasedInfo purchasedInfo = result.AsSuccess;
}
else
{
var error = result.AsFailure;
}
});
SDK is using Cocoapods
- In
Build setting
select iOS platform and pressBuild
- Select build folder (unity will exported iOS project to build folder)
- Build folder should contain
Podfile
- In Terminal open build folder and run commend
pod install
- Open generated
*.worksapce
to build your unity project
Warning
π§π§π§π§π§π§π§π§π§π§π§π§π§π§π§
If command
pod install
returns errorCocoaPods could not find compatible versions for pod "AffiseInternal"
Run
pod repo update
and then runpod install
againπ§π§π§π§π§π§π§π§π§π§π§π§π§π§π§
If Podfile hasn't generated you can create it manually using this Podfile as template
Podfile:
platform :ios, '11.0'
target 'UnityFramework' do
pod 'AffiseInternal', '1.6.42'
# Affise Modules
# pod 'AffiseModule', `1.6.42`
end
target 'Unity-iPhone' do
end
use_frameworks! :linkage => :static
To match users with events and data library is sending, these ProviderType
identifiers are collected:
AFFISE_APP_ID
AFFISE_PKG_APP_NAME
AFF_APP_NAME_DASHBOARD
APP_VERSION
APP_VERSION_RAW
STORE
TRACKER_TOKEN
TRACKER_NAME
FIRST_TRACKER_TOKEN
FIRST_TRACKER_NAME
LAST_TRACKER_TOKEN
LAST_TRACKER_NAME
OUTDATED_TRACKER_TOKEN
INSTALLED_TIME
FIRST_OPEN_TIME
INSTALLED_HOUR
FIRST_OPEN_HOUR
INSTALL_FIRST_EVENT
INSTALL_BEGIN_TIME
INSTALL_FINISH_TIME
REFERRER_INSTALL_VERSION
REFERRAL_TIME
REFERRER_CLICK_TIME
REFERRER_CLICK_TIME_SERVER
REFERRER_GOOGLE_PLAY_INSTANT
CREATED_TIME
CREATED_TIME_MILLI
CREATED_TIME_HOUR
UNINSTALL_TIME
REINSTALL_TIME
LAST_SESSION_TIME
CPU_TYPE
HARDWARE_NAME
DEVICE_MANUFACTURER
DEEPLINK_CLICK
DEVICE_ATLAS_ID
AFFISE_DEVICE_ID
AFFISE_ALT_DEVICE_ID
ANDROID_ID
ANDROID_ID_MD5
REFTOKEN
REFTOKENS
REFERRER
USER_AGENT
MCCODE
MNCODE
REGION
COUNTRY
LANGUAGE
DEVICE_NAME
DEVICE_TYPE
OS_NAME
PLATFORM
SDK_PLATFORM
API_LEVEL_OS
AFFISE_SDK_VERSION
OS_VERSION
RANDOM_USER_ID
AFFISE_SDK_POS
TIMEZONE_DEV
AFFISE_EVENT_NAME
AFFISE_EVENT_TOKEN
LAST_TIME_SESSION
TIME_SESSION
AFFISE_SESSION_COUNT
LIFETIME_SESSION_COUNT
AFFISE_DEEPLINK
AFFISE_PART_PARAM_NAME
AFFISE_PART_PARAM_NAME_TOKEN
AFFISE_APP_TOKEN
LABEL
AFFISE_SDK_SECRET_ID
UUID
AFFISE_APP_OPENED
PUSHTOKEN
AFFISE_EVENTS_COUNT
AFFISE_SDK_EVENTS_COUNT
AFFISE_METRICS_EVENTS_COUNT
AFFISE_INTERNAL_EVENTS_COUNT
IS_ROOTED
IS_EMULATOR
GAID_ADID
GAID_ADID_MD5
OAID
OAID_MD5
ADID
ALTSTR_ADID
FIREOS_ADID
COLOROS_ADID
MAC_SHA1
MAC_MD5
CONNECTION_TYPE
PROXY_IP_ADDRESS
NETWORK_TYPE
ISP
There are two ways to send events
- Cache event to later scheduled send in batch
AddToCartEvent()
.Send();
- Send event right now
AddToCartEvent()
.SendNow(() =>
{
// handle event send success
}, (errorResponse) =>
{
// handle event send failed
// π₯Warning:π₯ event is NOT cached for later send
}
);
For example, we want to track achievements. To send event first create it with following code
class Presenter {
void OnUnlockAchievement()
{
var achievement = new JSONObject
{
["achievement"] = "new level",
};
new UnlockAchievementEvent("best damage")
.AddPredefinedParameter(PredefinedLong.USER_SCORE, 12552L)
.AddPredefinedParameter(PredefinedString.ACHIEVEMENT_ID, "1334-1225-ASDZ")
.AddPredefinedParameter(PredefinedObject.CONTENT, achievement)
.Send();
}
}
With above example you can implement other events:
AchieveLevel
AddPaymentInfo
AddToCart
AddToWishlist
AdRevenue
ClickAdv
CompleteRegistration
CompleteStream
CompleteTrial
CompleteTutorial
Contact
ContentItemsView
CustomizeProduct
DeepLinked
Donate
FindLocation
InitiateCheckout
InitiatePurchase
InitiateStream
Invite
LastAttributedTouch
Lead
ListView
Login
OpenedFromPushNotification
Order
OrderItemAdded
OrderItemRemove
OrderCancel
OrderReturnRequest
OrderReturnRequestCancel
Purchase
Rate
ReEngage
Reserve
Sales
Schedule
Search
Share
SpendCredits
StartRegistration
StartTrial
StartTutorial
SubmitApplication
Subscribe
TravelBooking
UnlockAchievement
Unsubscribe
Update
ViewAdv
ViewCart
ViewContent
ViewItem
ViewItems
InitialSubscription
InitialTrial
InitialOffer
ConvertedTrial
ConvertedOffer
TrialInRetry
OfferInRetry
SubscriptionInRetry
RenewedSubscription
FailedSubscriptionFromRetry
FailedOfferFromRetry
FailedTrialFromRetry
FailedSubscription
FailedOfferise
FailedTrial
ReactivatedSubscription
RenewedSubscriptionFromRetry
ConvertedOfferFromRetry
ConvertedTrialFromRetry
Unsubscription
Use any of custom events if default doesn't fit your scenario:
CustomId01Event
CustomId02Event
CustomId03Event
CustomId04Event
CustomId05Event
CustomId06Event
CustomId07Event
CustomId08Event
CustomId09Event
CustomId10Event
If above event functionality still limits your usecase, you can use UserCustomEvent
new UserCustomEvent(eventName: "MyCustomEvent")
.Send();
To enrich your event with another dimension, you can use predefined parameters for most common cases. Add it to any event:
class Presenter {
void OnUnlockAchievement()
{
var achievement = new JSONObject
{
["achievement"] = "new level",
};
new UnlockAchievementEvent(
userData: "best damage"
)
.AddPredefinedParameter(PredefinedString.DESCRIPTION, "best damage")
.AddPredefinedParameter(PredefinedObject.CONTENT, achievement)
.Send();
}
}
In examples above PredefinedParameters.DESCRIPTION
and PredefinedObject.CONTENT
is used, but many others is available:
PredefinedParameter | Type |
---|---|
PredefinedString | string |
PredefinedLong | long |
PredefinedFloat | float |
PredefinedObject | JSONObject |
PredefinedListObject | List<JSONObject> |
PredefinedListString | List<string> |
ACHIEVEMENT_ID
ADREV_AD_TYPE
BRAND
BRICK
CAMPAIGN_ID
CATALOGUE_ID
CHANNEL_TYPE
CITY
CLASS
CLICK_ID
CONTENT_ID
CONTENT_NAME
CONTENT_TYPE
CONVERSION_ID
COUNTRY
COUPON_CODE
CURRENCY
CUSTOMER_SEGMENT
CUSTOMER_TYPE
CUSTOMER_USER_ID
DEEP_LINK
DESCRIPTION
DESTINATION_A
DESTINATION_B
DESTINATION_LIST
EVENT_NAME
NEW_VERSION
OLD_VERSION
ORDER_ID
PARAM_01
PARAM_02
PARAM_03
PARAM_04
PARAM_05
PARAM_06
PARAM_07
PARAM_08
PARAM_09
PARAM_10
PAYMENT_INFO_AVAILABLE
PID
PREFERRED_NEIGHBORHOODS
PRODUCT_ID
PRODUCT_NAME
PURCHASE_CURRENCY
RECEIPT_ID
REGION
REGISTRATION_METHOD
REVIEW_TEXT
SEARCH_STRING
SEGMENT
STATUS
SUBSCRIPTION_ID
SUCCESS
SUGGESTED_DESTINATIONS
SUGGESTED_HOTELS
TUTORIAL_ID
UTM_CAMPAIGN
UTM_MEDIUM
UTM_SOURCE
VALIDATED
VERTICAL
VIRTUAL_CURRENCY_NAME
VOUCHER_CODE
AMOUNT
DATE_A
DATE_B
DEPARTING_ARRIVAL_DATE
DEPARTING_DEPARTURE_DATE
HOTEL_SCORE
LEVEL
MAX_RATING_VALUE
NUM_ADULTS
NUM_CHILDREN
NUM_INFANTS
PREFERRED_NUM_STOPS
PREFERRED_STAR_RATINGS
QUANTITY
RATING_VALUE
RETURNING_ARRIVAL_DATE
RETURNING_DEPARTURE_DATE
SCORE
TRAVEL_START
TRAVEL_END
USER_SCORE
EVENT_START
EVENT_END
PREFERRED_PRICE_RANGE
PRICE
REVENUE
LAT
LONG
CONTENT
CONTENT_LIST
CONTENT_IDS
Affise library will send any pending events with first opportunity, but if there is no network connection or device is disabled, events are kept locally for 7 days before deletion.
To let affise track push token you need to receive it from your push service provider, and pass to Affise library. First add firebase integration to your app completing these steps: Firebase iOS or Android Docs
Affise.AddPushToken(token);
- Register deeplink callback right after
Affise.Settings(affiseAppId,secretKey).Start()
Affise.RegisterDeeplinkCallback((value) =>
{
// full uri "scheme://host/path?parameters"
var deeplink = value.Deeplink;
// separated for convenience
var scheme = value.Scheme;
var host = value.Host;
var path = value.Path;
var queryParametersMap = value.Parameters;
if(queryParametersMap["<your_uri_key>"]?.Contains("<your_uri_key_value>") == true) {
// handle value
}
});
Test Android DeepLink via terminal command:
adb shell am start -a android.intent.action.VIEW -d "YOUR_SCHEME://YOUR_DOMAIN/somepath?param=1\&list=some\&list=other\&list="
Test iOS DeepLink via terminal command:
xcrun simctl openurl booted "YOUR_SCHEME://YOUR_DOMAIN/somepath?param=1&list=some&list=other&list=1"
Open Edit / Project Settings / Affise
On Settings
tab add links
Warning
π§π§π§π§π§π§π§π§π§π§π§π§π§π§π§
For Android deeplink remove is manual
Open Android project and remove deeplink
intent-filter
fromAndroidManifest.xml
π§π§π§π§π§π§π§π§π§π§π§π§π§π§π§
Warning
π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯
Deeplinks support only CUSTOM scheme NOT
http
orhttps
For
http
orhttps
read how to setup AppLinksπ₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯
To integrate deeplink support in android you need:
-
Add intent filter to
AndroidManifest.xml
. For more info read Unity docs -
Add custom scheme (NOT
http
orhttps
) and host to filter
Example: YOUR_SCHEME://YOUR_DOMAIN
Example: myapp://mydomain.com
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="YOUR_DOMAIN"
android:scheme="YOUR_SCHEME" />
</intent-filter>
To integrate deeplink support in iOS you need:
Add key CFBundleURLTypes
to Info.plist
file in Xcode project folder
Example: YOUR_SCHEME://YOUR_DOMAIN
Example: myapp://mydomain.com
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>YOUR_DOMAIN</string>
<key>CFBundleURLSchemes</key>
<array>
<string>YOUR_SCHEME</string>
</array>
</dict>
</array>
Warning
π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯
You must owne website domain.
And has ability to add file
https://yoursite/.well-known/apple-app-site-association
for iOS supportAnd has ability to add file
https://yoursite/.well-known/assetlinks.json
for Android supportπ₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯
To integrate applink support in android you need:
-
Add intent filter to
AndroidManifest.xml
. For more info read Unity docs -
Add
https
orhttp
scheme and host to filter
Example: https://YOUR_DOMAIN
Example: https://mydomain.com
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="YOUR_DOMAIN"
android:scheme="https" />
</intent-filter>
-
Associate your app with your website. Read Google instructions
How To Associate your app with your website
After setting up URL support for your app, the App Links Assistant generates a Digital Assets Links file you can use to associate your website with your app.
As an alternative to using the Digital Asset Links file, you can associate your site and app in Search Console.
If you're using Play App Signing for your app, then the certificate fingerprint produced by the App Links Assistant usually doesn't match the one on users' devices. In this case, you can find the correct Digital Asset Links JSON snippet for your app in your Play Console developer account under Release > Setup > App signing.
To associate your app and your website using the App Links Assistant, click Open Digital Asset Links File Generator from the App Links Assistant and follow these steps:
Figure 2. Enter details about your site and app to generate a Digital Asset Links file.
-
Enter your Site domain and your Application ID.
-
To include support in your Digital Asset Links file for One Tap sign-in, select Support sharing credentials between the app and the website and enter your site's sign-in URL.This adds the following string to your Digital Asset Links file declaring that your app and website share sign-in credentials:
delegate_permission/common.get_login_creds
. -
Specify the signing config or select a keystore file.
Make sure you select the right release config or keystore file for the release build or the debug config or keystore file for the debug build of your app. If you want to set up your production build, use the release config. If you want to test your build, use the debug config.
- Click Generate Digital Asset Links file.
- Once Android Studio generates the file, click Save file to download it.
- Upload the
assetlinks.json
file to your site, with read access for everyone, athttps://yoursite/.well-known/assetlinks.json
.
Important
The system verifies the Digital Asset Links file via the encrypted HTTPS protocol. Make sure that the assetlinks.json file is accessible over an HTTPS connection, regardless of whether your app's intent filter includes https.
- Click Link and Verify to confirm that you've uploaded the correct Digital Asset Links file to the correct location.
Learn more about associating your website with your app through the Digital Asset Links file in Declare website associations.
-
To integrate applink support in iOS you need:
-
Follow how to set up applink in the official documentation.
-
Associate your app with your website. Supporting associated domains
-
Add key
com.apple.developer.associated-domains
toInfo.plist
Example: https://YOUR_DOMAIN
Example: https://mydomain.com
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:YOUR_DOMAIN</string>
</array>
In some scenarios you would want to limit Affise network usage, to pause that activity call anywhere in your application following code after Affise start:
Affise.SetOfflineModeEnabled(true) // to enable offline mode
Affise.SetOfflineModeEnabled(false) // to disable offline mode
While offline mode is enabled, your metrics and other events are kept locally, and will be delivered once offline mode is disabled. Offline mode is persistent as Application lifecycle, and will be disabled with process termination automatically. To check current offline mode status call:
Affise.IsOfflineModeEnabled() // returns true or false describing current tracking state
To disable any tracking activity, storing events and gathering device identifiers and metrics call anywhere in your application following code after Affise start:
Affise.SetTrackingEnabled(true) // to enable tracking
Affise.SetTrackingEnabled(false) // to disable tracking
By default tracking is enabled.
While tracking mode is disabled, metrics and other identifiers is not generated locally. Keep in mind that this flag is persistent until app reinstall, and don't forget to reactivate tracking when needed. To check current status of tracking call:
Affise.IsTrackingEnabled() // returns true or false describing current tracking state
To disable any background tracking activity, storing events and gathering device identifiers and metrics call anywhere in your application following code after Affise start:
Affise.SetBackgroundTrackingEnabled(true) // to enable background tracking
Affise.SetBackgroundTrackingEnabled(false) // to disable background tracking
By default background tracking is enabled.
While background tracking mode is disabled, metrics and other identifiers is not generated locally. Background tracking mode is persistent as Application lifecycle, and will be re-enabled with process termination automatically. To check current status of background tracking call:
Affise.IsBackgroundTrackingEnabled() // returns true or false describing current background tracking state
Affise.GetRandomUserId();
Affise.GetRandomDeviceId();
Returns providers map with ProviderType as key
var providers = Affise.GetProviders();
var key = ProviderType.AFFISE_APP_TOKEN;
if (providers.ContainsKey(key)) {
var value = providers[key];
}
Affise.IsFirstRun();
Warning
π§π§π§π§π§π§π§π§π§π§π§π§π§π§π§
Don't call this method directly in
Awake()
it may causeNullReferenceException
π§π§π§π§π§π§π§π§π§π§π§π§π§π§π§
Use the next public method of SDK to get referrer
Affise.GetReferrerUrl(referrer => {
// handle referrer
});
Use the next public method of SDK to get referrer value by
Affise.GetReferrerUrlValue(ReferrerKey.CLICK_ID, referrer => {
// handle referrer value
});
iOS Only
Note
Requires Affise Status Module for ios
Use the next public method of SDK
Affise.IOS.GetReferrerOnServer(referrer => {
// handle referrer
});
iOS Only
Note
Requires Affise Status Module for ios
Use the next public method of SDK to get referrer parameter by
Affise.IOS.GetReferrerOnServerValue(ReferrerKey.CLICK_ID, referrer => {
// handle referrer value
});
In examples above ReferrerKey.CLICK_ID
is used, but many others is available:
AD_ID
CAMPAIGN_ID
CLICK_ID
AFFISE_AD
AFFISE_AD_ID
AFFISE_AD_TYPE
AFFISE_ADSET
AFFISE_ADSET_ID
AFFISE_AFFC_ID
AFFISE_CHANNEL
AFFISE_CLICK_LOOK_BACK
AFFISE_COST_CURRENCY
AFFISE_COST_MODEL
AFFISE_COST_VALUE
AFFISE_DEEPLINK
AFFISE_KEYWORDS
AFFISE_MEDIA_TYPE
AFFISE_MODEL
AFFISE_OS
AFFISE_PARTNER
AFFISE_REF
AFFISE_SITE_ID
AFFISE_SUB_SITE_ID
AFFISE_SUB_1
AFFISE_SUB_2
AFFISE_SUB_3
AFFISE_SUB_4
AFFISE_SUB_5
AFFC
PID
SUB_1
SUB_2
SUB_3
SUB_4
SUB_5
Warning
π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯
If
getStatus
return an error or working more than 2 minutesPlease see section validation credentials
π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯
Affise.Module.GetStatus(AffiseModules.Status, response => {
// handle response
});
iOS Only
For ios prior 16.1
first call
Affise.IOS.RegisterAppForAdNetworkAttribution(error =>
{
// Handle error
});
Updates the fine and coarse conversion values, and calls a completion handler if the update fails. Second argument coarseValue is available in iOS 16.1+
Affise.IOS.UpdatePostbackConversionValue(1, SKAdNetwork.CoarseConversionValue.Medium, error =>
{
// Handle error
});
Configure your app to send postback copies to Affise:
Add key NSAdvertisingAttributionReportEndpoint
to project Info.plist
Set key value to https://affise-skadnetwork.com/
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>NSAdvertisingAttributionReportEndpoint</key>
<string>https://affise-skadnetwork.com/</string>
</dict>
</array>
// Send AdRevenue info
new AffiseAdRevenue(AffiseAdSource.ADMOB)
.SetRevenue(2.5f, "ImpressionData_Currency")
.SetNetwork("ImpressionData_Network")
.SetUnit("ImpressionData_Unit")
.SetPlacement("ImpressionData_Placement")
.Send();
Warning
π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯
Debug methods WON'T work on Production
π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯
Validate your credentials by receiving ValidationStatus
values:
VALID
- your credentials are validINVALID_APP_ID
- your app id is not validINVALID_SECRET_KEY
- your SDK secretKey is not validPACKAGE_NAME_NOT_FOUND
- your application package name not foundNOT_WORKING_ON_PRODUCTION
- you using debug method on productionNETWORK_ERROR
- network or server not available (for exampleAiroplane mode
is active)
Affise
.Settings(
affiseAppId: "Your appId",
secretKey: "Your SDK secretKey"
)
.SetProduction(false) //To enable debug methods set Production to false
.Start(); // Start Affise SDK
Affise.Debug.Validate(status =>
{
// Handle validation status
});
Warning
π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯
This app has crashed because Affise Advertising Module is attempted to access privacy-sensitive data without a usage description.
The app's
Info.plist
must contain anNSUserTrackingUsageDescription
key with a string value explainingto the user how the app uses this data.
π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯
Open info.plist
and add key NSUserTrackingUsageDescription
with string value. For more information read requirements
Warning
π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯
Application has crashed on Android 14 (API level 34) with error
java.lang.SecurityException: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts
Cause: Google enforced new security policy for Android 14 (API level 34).
π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯π₯
Update Unity
minimum version for 2023.3.0a4
, 2022.3.14f1
, 2021.3.33f1
Related Unity issue
Earlier versions are not supported