Xamarin - Android
Before starting your application instrumentation, ensure that you have created an app and have an appKey
Install
-
Download Pyze Xamarin Android Binding Download Pyze-Xamarin-Android.dll from here
-
Add the PyzeXamarinAndroid.dll under .Droid -> References
-
Right click on References -> Edit References -> .Net Assembly -> Browse the dll -> Ok s
Initialize
Modify the Android Manifest
Add following tag under application tag of the manifest:
<meta-data android:name="PyzeAppKey" android:value="Use PyzeAppKey from growth.pyze.com" />
Ensure that the following Permissions are specified in the manifest:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
Modify the Main Activity of Your Project
Add the following import statement in the Main Activity:
using pyze.xamarin.android;
Add the following Pyze.initialize
statement in the Main Activity’s onCreate
method:
public void onCreate(Bundle savedInstanceState) {
//
//
//...
Pyze.initialize(this);
// Alternatively you can pass the log throttling setting as the second parameter.
// Ex: Pyze.Initialize(this, PyzeLogLevel.All);
}
Custom Events
Custom events allow you to easily track unique user actions within your app.
Event
using pyze.xamarin.android.PyzeEvents;
...
...
PyzeCustomEvent.PostCustomEvent("Blog Read");
This allows you to track when a user executed an action, for a simple count of how often that event is occurring.
Event with Attributes
Attributes are any key-value pair that you can attach to an event. You can have up to 99 attributes with any event. It is highly recommended to follow our Best Practices and heavily rely on attributes to make your instrumentation as minimal and useful as possible. In a typical application, you should have many more attributes than events.
using pyze.xamarin.android.PyzeEvents;
...
...
var attributes = new Dictionary();
attributes.Add("screen", "Home");
attributes.Add("seconds spent", "50");
PyzeCustomEvent.PostCustomEventsWithAttributes("Blog Read", attributes);
Profile
Profiles are a powerful way to add data about your users to Pyze. Use profiles to add data that is not specific to a point in time (events) and are attached to a specific user.
When a user logs in to your app, call setUserProfile
to identify them to Pyze. Any events that happen after they are identified, will be attributed to this user. You should only call this method once upon the initial login of a session.
You can optionally include profile attributes.
Pyze built-in profile attributes get special handling in the pyze UI, and we will attempt to discern the data type for custom attributes based on the data recieved. There is no difference between the built-in attributes and custom ones outside of formatting applied.
using pyze.xamarin.android.PyzeIdentity;
...
//Create Pyze Profile Attributes object
var pyzeProfileAttributes = new Dictionary<>();
pyzeProfileAttributes.Add("email_id", "xyz@abc.com");
pyzeProfileAttributes.Add("date_of_birth", "1984-06-01");
pyzeProfileAttributes.Add("first_name", "John");
pyzeProfileAttributes.Add("last_name", "Jacobs");
//Create Custom Profile Attributes object
var customProfileAttributes = new Dictionary<>();
customProfileAttributes.Add("age", 29);
customProfileAttributes.Add("picode", "23200");
customProfileAttributes.Add("city", "XYZ");
//Call the setUserProfile API
PyzeIdentity.setUserProfile(userId,pyzeProfileAttributes,customProfileAttributes);
Pyze profile attributes
Pyze User Profile Field Name | Data Type/Description |
---|---|
background | (string) User background, biography or historical data |
country | (string) Country codes must be sent in the ISO-3166-1 alpha-2 standard. |
current_location | (object) Format: {“longitude”: -33.991894, “latitude”: 25.243732} |
date_of_first_use | (date at which the user first used the app) String in ISO 8601 format or in yyyy-MM-dd’T’HH:mm:ss.SSSZ format. |
date_of_last_use | (date at which the user last used the app) String in ISO 8601 format or in yyyy-MM-dd’T’HH:mm:ss.SSSZ format. |
date_of_birth | (date of birth) String in format “YYYY-MM-DD”, example: 1984-06-01. |
email_id | (string) Email Id |
email_subscribe | (string) Acceptable values are “opt_in” (explicit approval to receive email messages), “opt_out” (explicit denial to email messages), and “subscribed” (neither opted in nor out). |
email_hard_bounced | Automatically updated when a hard bounce occurs (true or false) |
email_spam_reported | Automatically updated when a user marks your email as spam, via the ISP (true or false) |
facebook_id | facebook ID |
first_name | (string) User’s First name |
gender | (string) “M”, “F”, “O” (other), “N” (not applicable), “P” (prefer not to say) or “U” (unknown). |
home_city | (string) User’s Home City |
image_url | (string) URL of image to be associated with the user |
language | (string) Require language to be sent in the ISO-639-1 standard. |
last_name | (string) User’s Last Name |
marked_email_as_spam_at | (string) Date at which the user’s email was marked as spam. Must be in ISO 8601 format or in yyyy-MM-dd’T’HH:mm:ss.SSSZ format. |
phone | (string) Phone number |
push_subscribe | (string) Available values are “opted_in” (explicitly registered to receive push messages), “unsubscribed” (explicitly opted out of push messages), and “subscribed” (neither opted in nor out). |
push_tokens | Array of objects with app_id and token string. You may optionally provide a device_id for the device this token is associated with, e.g., [{“app_id”: App Identifier, “token”: “abcd”, “device_id”: “optional_field_value”}]. If a device_id is not provided, one will be randomly generated. |
time_zone | (string) Time Zone’s must be sent as per IANA Time Zone Database (e.g., “America/New_York” or “Eastern Time (US & Canada)”). Only valid values will be respected. |
twitter_id | Twitter ID |
Updating an existing user Profile
To update user profile attributes which are already set, use the following api.
Note : Do not call this api before calling setUserProfile.
//Create Pyze Profile Attributes object
HashMap <String, String> pyzeProfileAttributes = new HashMap<String, String>();
pyzeProfileAttributes.put("email_id", "xyz@abc.com");
pyzeProfileAttributes.put("date_of_birth", "1984-06-01");
pyzeProfileAttributes.put("first_name", "John");
pyzeProfileAttributes.put("last_name", "Jacobs");
//Create Custom Profile Attributes object
HashMap <String, String> customProfileAttributes = new HashMap<String, String>();
customProfileAttributes.put("age", 29);
customProfileAttributes.put("picode", "23200");
customProfileAttributes.put("city", "XYZ");
//Call the updateUserProfileAttributes API
PyzeIdentity.updateUserProfile(userId,pyzeProfileAttributes,customProfileAttributes);
Logging out a user
Call this api when a user logs out. Event sent after this call will have no identity attached, and will be attributed to an anonymous user.
PyzeIdentity.resetUserProfile();
User Privacy
Pyze provides APIs to allow end-users to Opt out of Data Collection and also instruct the Pyze system to forget a user’s data.
setUserOptOut
Allows end-users to opt out from data collection. Opt-out can be toggled true or false.
Pyze.setUserOptOut(true)
To resume user data collection set value to false
deleteUser
Allows end-users to opt out from data collection and delete the user in the Pyze system. We recommend you confirm this action as once a user is deleted, this cannot be undone.
Pyze.deleteUser(true)
Push Notifications
- Create a new Android project at https://console.firebase.google.com/ and download the google-services.json.
- Add the below string resouces, with values extracted from google-services.json to the Resources -> values file, if values file is not present then please create one.
//values of string resources here represent, key path to get the values from google-services.json
<string name="default_web_client_id" translatable="false"> client ->oauth_client ->client_id </string>
<string name="firebase_database_url" translatable="false"> project_info ->firebase_url </string>
<string name="gcm_defaultSenderId" translatable="false"> project_info ->project_number </string>
<string name="google_api_key" translatable="false"> client ->api_key ->current_key </string>
<string name="google_app_id" translatable="false"> client ->client_info ->mobilesdk_app_id </string>
<string name="google_crash_reporting_api_key" translatable="false"> client ->api_key ->current_key </string>
<string name="google_storage_bucket" translatable="false"> project_info ->storage_bucket </string>
- Make sure that you are using the same package name in firebase and your Xamarin project.
- Add the following entries to you AndroidManifest.xml file. Be sure to replace the two instances of “My_Package_Name” below with your App’s package name:
<activity android:name="com.pyze.android.push.PyzePushTrackingActivity" android:exported="true"/>
<service android:name="com.pyze.android.push.fcm.FcmPushListenerService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name="com.pyze.android.push.fcm.FcmInstanceIDListenerService" android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<provider android:name="com.google.firebase.provider.FirebaseInitProvider"
android:authorities="My_Package_Name.firebaseinitprovider"
android:exported="false"
android:initOrder="100" />
<service android:name="com.google.firebase.iid.FirebaseInstanceIdService" android:exported="true" >
<intent-filter android:priority="-500" >
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="My_Package_Name" />
</intent-filter>
</receiver>
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
<service android:name="com.google.firebase.messaging.FirebaseMessagingService" android:exported="true" >
<intent-filter android:priority="-500" >
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
Please review the Android documentation for further information on working with Push Notification
In-App Notifications
In-app notifications allow app businesses to reach out to app users when they use your app. In-App notifications are built-in to the pyze sdk and have no additional dependecies.businesses to reach out to users from manually from Dynamic Funnels and Intelligence Explorer, and automatically based on workflows and campaigns from Growth Automation. In-App notifications can be sent from Campaigns
Call the following method, wherever you want to check for new messages and pop-up a modal with the notification:
Method accepts a callback handler method which will be invoked whenever any of the call to action button on the UI is pressed.
Pyze.ShowInAppMessage(this, (sender, e) =>
{
//On in app button pressed
});
API Reference
Full API reference available here