22
33#include " Immutable/ImmutablePassport.h"
44
5+ #include " ImmutableAnalytics.h"
56#include " Immutable/Misc/ImtblLogging.h"
67#include " Immutable/ImmutableResponses.h"
78#include " Immutable/ImtblJSConnector.h"
@@ -57,6 +58,7 @@ void UImmutablePassport::Connect(bool IsConnectImx, bool TryToRelogin, const FIm
5758 }
5859 else
5960 {
61+ Analytics->Track (IsConnectImx ? UImmutableAnalytics::EEventName::START_CONNECT_IMX : UImmutableAnalytics::EEventName::START_LOGIN);
6062 CallJS (ImmutablePassportAction::INIT_DEVICE_FLOW, TEXT (" " ), ResponseDelegate, FImtblJSResponseDelegate::CreateUObject (this , &UImmutablePassport::OnInitDeviceFlowResponse));
6163 }
6264}
@@ -70,6 +72,7 @@ void UImmutablePassport::ConnectPKCE(bool IsConnectImx, const FImtblPassportResp
7072 SetStateFlags (IPS_IMX);
7173 }
7274 PKCEResponseDelegate = ResponseDelegate;
75+ Analytics->Track (IsConnectImx ? UImmutableAnalytics::EEventName::START_CONNECT_IMX_PKCE : UImmutableAnalytics::EEventName::START_LOGIN_PKCE);
7376 CallJS (ImmutablePassportAction::GetPKCEAuthUrl, TEXT (" " ), PKCEResponseDelegate, FImtblJSResponseDelegate::CreateUObject (this , &UImmutablePassport::OnGetPKCEAuthUrlResponse));
7477}
7578#endif
@@ -210,11 +213,15 @@ void UImmutablePassport::Setup(const TWeakObjectPtr<UImtblJSConnector> Connector
210213
211214 if (!Connector.IsValid ())
212215 {
213- IMTBL_ERR (" Invalid JSConnector passed to UImmutablePassport::Initialize ." )
216+ IMTBL_ERR (" Invalid JSConnector passed to UImmutablePassport::Setup ." )
214217 return ;
215218 }
216219
217220 JSConnector = Connector.Get ();
221+
222+ // Analytics
223+ Analytics = NewObject<UImmutableAnalytics>(this );
224+ Analytics->Setup (Connector);
218225}
219226
220227void UImmutablePassport::ReinstateConnection (FImtblJSResponse Response)
@@ -224,15 +231,19 @@ void UImmutablePassport::ReinstateConnection(FImtblJSResponse Response)
224231 if (auto ResponseDelegate = GetResponseDelegate (Response))
225232 {
226233 // currently, this response has to be called only for RELOGIN AND RECONNECT bridge routines
227- const FString CallbackName = (Response.responseFor .Compare (ImmutablePassportAction::RELOGIN, ESearchCase::IgnoreCase) == 0 ) ? " Relogin" : " Reconnect" ;
234+ bool IsRelogin = Response.responseFor .Compare (ImmutablePassportAction::RELOGIN, ESearchCase::IgnoreCase) == 0 ;
235+ const FString CallbackName = IsRelogin ? " Relogin" : " Reconnect" ;
236+ UImmutableAnalytics::EEventName EventName = IsRelogin ? UImmutableAnalytics::EEventName::COMPLETE_RELOGIN : UImmutableAnalytics::EEventName::COMPLETE_RECONNECT;
228237
229238 if (Response.JsonObject ->GetBoolField (TEXT (" result" )))
230239 {
231240 SetStateFlags (IPS_CONNECTED);
232241 ResponseDelegate->ExecuteIfBound (FImmutablePassportResult{true , " " , Response});
242+ Analytics->Track (EventName, true );
233243 }
234244 else
235245 {
246+ Analytics->Track (EventName, false );
236247#if PLATFORM_ANDROID | PLATFORM_IOS | PLATFORM_MAC
237248 if (IsStateFlagsSet (IPS_PKCE))
238249 {
@@ -296,7 +307,7 @@ void UImmutablePassport::OnInitializeResponse(FImtblJSResponse Response)
296307 IMTBL_ERR (" Passport initialization failed." )
297308 Response.Error .IsSet () ? Msg = Response.Error ->ToString () : Msg = Response.JsonObject ->GetStringField (TEXT (" error" ));
298309 }
299-
310+ Analytics-> Track (UImmutableAnalytics::EEventName::INIT_PASSPORT, Response. success );
300311 ResponseDelegate->ExecuteIfBound (FImmutablePassportResult{Response.success , Msg, Response});
301312 }
302313}
@@ -395,6 +406,7 @@ void UImmutablePassport::OnLogoutResponse(FImtblJSResponse Response)
395406
396407 return ;
397408 }
409+ Analytics->Track (UImmutableAnalytics::EEventName::COMPLETE_LOGOUT);
398410 Message = " Logged out" ;
399411 IMTBL_LOG (" %s" , *Message)
400412 ResponseDelegate->ExecuteIfBound (FImmutablePassportResult{ Response.success , Message });
@@ -498,6 +510,7 @@ void UImmutablePassport::OnConnectPKCEResponse(FImtblJSResponse Response)
498510 ResetStateFlags (IPS_PKCE);
499511 Response.Error .IsSet () ? Msg = Response.Error ->ToString () : Msg = Response.JsonObject ->GetStringField (TEXT (" error" ));
500512 }
513+ Analytics->Track (IsStateFlagsSet (IPS_IMX) ? UImmutableAnalytics::EEventName::COMPLETE_CONNECT_IMX_PKCE : UImmutableAnalytics::EEventName::COMPLETE_LOGIN_PKCE, Response.success );
501514 PKCEResponseDelegate.ExecuteIfBound (FImmutablePassportResult{Response.success , Msg});
502515 PKCEResponseDelegate = nullptr ;
503516
@@ -675,6 +688,7 @@ void UImmutablePassport::OnConfirmCodeResponse(FImtblJSResponse Response)
675688 {
676689 FString Msg;
677690 FString TypeOfConnection = IsStateFlagsSet (IPS_IMX) ? TEXT (" connect" ) : TEXT (" login" );
691+ UImmutableAnalytics::EEventName EventName = IsStateFlagsSet (IPS_IMX) ? UImmutableAnalytics::EEventName::COMPLETE_CONNECT_IMX : UImmutableAnalytics::EEventName::COMPLETE_LOGIN;
678692
679693 ResetStateFlags (IPS_CONNECTING);
680694 if (Response.success )
@@ -687,6 +701,7 @@ void UImmutablePassport::OnConfirmCodeResponse(FImtblJSResponse Response)
687701 IMTBL_LOG (" %s code not confirmed." , *TypeOfConnection)
688702 Response.Error .IsSet () ? Msg = Response.Error ->ToString () : Msg = Response.JsonObject ->GetStringField (TEXT (" error" ));
689703 }
704+ Analytics->Track (EventName, Response.success );
690705 ResponseDelegate->ExecuteIfBound (FImmutablePassportResult{Response.success , Msg, Response});
691706 }
692707}
@@ -850,6 +865,7 @@ void UImmutablePassport::OnDeepLinkActivated(FString DeepLink)
850865 {
851866 FGraphEventRef GameThreadTask = FFunctionGraphTask::CreateAndDispatchWhenReady ([this ]()
852867 {
868+ Analytics->Track (UImmutableAnalytics::EEventName::COMPLETE_LOGOUT_PKCE);
853869 PKCELogoutResponseDelegate.ExecuteIfBound (FImmutablePassportResult{true , " Logged out" });
854870 PKCELogoutResponseDelegate = nullptr ;
855871 ResetStateFlags (IPS_CONNECTED | IPS_PKCE | IPS_IMX);
0 commit comments