package Ġdev . jul ien grand ch av in . game _ services _ firebase _ auth Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Gravity Ċ import Ġandroidx . annotation . NonNull Ċ import Ġcom . google . android . gms . auth . api . Auth Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Account Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Client Ċ import Ġcom . google . android . gms . auth . api . signin . Google SignIn Options Ċ import Ġcom . google . android . gms . common . api . ApiException Ċ import Ġcom . google . android . gms . common . api . Status Ċ import Ġcom . google . android . gms . games . Games Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . auth . Firebase Auth Exception Ċ import Ġcom . google . firebase . auth . Play Games Auth Provider Ċ import Ġio . flutter . embedding . engine . plugins . Flutter Plugin Ċ import Ġio . flutter . embedding . engine . plugins . activity . Activity Aware Ċ import Ġio . flutter . embedding . engine . plugins . activity . Activity Plugin Binding Ċ import Ġio . flutter . plugin . common . Binary Messenger Ċ import Ġio . flutter . plugin . common . Method Channel . Result Ċ import Ġio . flutter . plugin . common . MethodCall Ċ import Ġio . flutter . plugin . common . Method Channel Ċ import Ġio . flutter . plugin . common . Plugin Registry Ċ import Ġjava . lang . Exception Ċ Ċ private Ġconst Ġval ĠCHAN NEL _ NAME Ġ= Ġ" game _ services _ firebase _ auth " Ċ private Ġconst Ġval ĠRC _ SIGN _ IN Ġ= Ġ 9 0 0 0 Ċ Ċ object ĠMethods Ġ{ ĊĠĠĠ Ġconst Ġval Ġsign In With Game Service Ġ= Ġ" sign _ in _ with _ game _ service " ĊĠĠĠ Ġconst Ġval Ġlink Game Services Credentials To CurrentUser Ġ= ĊĠĠĠĠĠĠĠ Ġ" link _ game _ services _ credentials _ to _ current _ user " Ċ } Ċ Ċ class ĠGame Services Firebase Auth Plugin ( private Ġvar Ġactivity : ĠActivity ? Ġ= Ġnull ) Ġ: ĠFlutter Plugin , ĊĠĠĠ ĠMethod Channel . MethodCall Handler , ĠActivity Aware , ĠPlugin Registry . Activity Result Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġgoogle SignIn Client : ĠGoogle SignIn Client ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġactivity Plugin Binding : ĠActivity Plugin Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġchannel : ĠMethod Channel ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġpending Operation : ĠPending Operation ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontext : ĠContext ĊĊĠĠĠ Ġprivate Ġvar Ġmethod : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠclientId : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġg Result : ĠResult ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġforce SignIn If Credential Already Used : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun ĠgetResource From Context (@ NonNull Ġcontext : ĠContext , Ġres Name : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Res Ġ= Ġcontext . resources . getIdentifier ( res Name , Ġ" string ", Ġcontext . packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( string Res Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġ' R . string .% s ' Ġvalue Ġit 's Ġnot Ġdefined Ġin Ġyour Ġproject 's Ġresources Ġfile .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcontext . getString ( string Res ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsilent SignIn () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġactivity Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Code Ġ= ĠclientId Ġ?: ĠgetResource From Context ( context , Ġ" default _ web _ client _ id ") ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠGoogle SignIn Options . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGoogle SignIn Options . DEFAULT _ G AMES _ SIGN _ IN ĊĠĠĠĠĠĠĠ Ġ). request Server Auth Code ( auth Code ) ĊĠĠĠĠĠĠĠ Ġgoogle SignIn Client Ġ= ĠGoogle SignIn . getClient ( activity , Ġbuilder . build ()) ĊĠĠĠĠĠĠĠ Ġgoogle SignIn Client ?. silent SignIn ()?. add On Complete Listener Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending Operation Ġ= ĠPending Operation ( method !! , Ġg Result !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle SignIn Result () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Error ", Ġ" signIn Error ", Ġtask . exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Explicit SignIn ", Ġ" Trying Ġexplicit Ġsign Ġin ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexplicit SignIn ( clientId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexplicit SignIn ( clientId : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġactivity Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Code Ġ= ĠclientId Ġ?: ĠgetResource From Context ( context , Ġ" default _ web _ client _ id ") ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠGoogle SignIn Options . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGoogle SignIn Options . DEFAULT _ G AMES _ SIGN _ IN ĊĠĠĠĠĠĠĠ Ġ). request Server Auth Code ( auth Code ) ĊĠĠĠĠĠĠĠ Ġgoogle SignIn Client Ġ= ĠGoogle SignIn . getClient ( activity , Ġbuilder . build ()) ĊĠĠĠĠĠĠĠ Ġactivity . startActivity For Result ( google SignIn Client ?. signIn Intent , ĠRC _ SIGN _ IN ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle SignIn Result () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġthis . activity !! ĊĊĠĠĠĠĠĠĠ Ġval Ġgames Client Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGames . get Games Client ( activity , ĠGoogle SignIn . getLast Signed In Account ( activity ) !! ) ĊĠĠĠĠĠĠĠ Ġgames Client . setView For Pop ups ( activity . findViewById ( android . R . id . content )) ĊĠĠĠĠĠĠĠ Ġgames Client . set Gravity For Pop ups ( Gravity . TOP Ġor ĠGr avity . CENTER _ HORIZONTAL ) ĊĊĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= ĠGoogle SignIn . getLast Signed In Account ( activity ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( account Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( method Ġ== ĠMethods . signIn With Game Service ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign In Firebase With Play Games ( account ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( method Ġ== ĠMethods . link Game Services Credentials To CurrentUser ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlink Credentials Firebase With Play Games ( account ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsign In Firebase With Play Games ( acct : ĠGoogle SignIn Account ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġauth Ġ= ĠFirebase Auth . getInstance () ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Code Ġ= Ġac ct . server Auth Code Ġ?: Ġthrow ĠException (" auth _ code _ null ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcredential Ġ= ĠPlay Games Auth Provider . getC redential ( auth Code ) ĊĊĠĠĠĠĠĠĠ Ġauth . signIn With Credential ( credential ). add On Complete Listener Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Pending Operation With Success () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Pending Operation WithError ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠException (" signIn With Credential Ġfailed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlink Credentials Firebase With Play Games ( acct : ĠGoogle SignIn Account ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġauth Ġ= ĠFirebase Auth . getInstance () ĊĊĠĠĠĠĠĠĠ Ġval ĠcurrentUser Ġ= Ġauth . currentUser Ġ?: Ġthrow Ġ ĠException (" current _ user _ null ") ĊĊĠĠĠĠĠĠĠ Ġval Ġauth Code Ġ= Ġac ct . server Auth Code Ġ?: Ġthrow ĠException (" auth _ code _ null ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcredential Ġ= ĠPlay Games Auth Provider . getC redential ( auth Code ) ĊĊĊĠĠĠĠĠĠĠ ĠcurrentUser . link With Credential ( credential ). add On Complete Listener Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Pending Operation With Success () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . exception Ġis ĠFirebase Auth Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( result . exception Ġas ĠFirebase Auth Exception ). errorCode Ġ== Ġ" ERROR _ CRED ENTIAL _ AL READY _ IN _ USE " Ġ&& Ġforce SignIn If Credential Already Used ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠMethods . signIn With Game Service ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsilent SignIn () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Pending Operation WithError ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠException (" link With Credential Ġfailed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Pending Operation WithError ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠException (" link With Credential Ġfailed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Engine ( binding : ĠFlutter Plugin . Flutter Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Channel ( binding . binary Messenger ) ĊĠĠĠĠĠĠĠ Ġcontext Ġ= Ġbinding . application Context ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Engine ( binding : ĠFlutter Plugin . Flutter Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġteardown Channel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Channel ( messenger : ĠBinary Messenger ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchannel Ġ= ĠMethod Channel ( messenger , ĠCHAN NEL _ NAME ) ĊĠĠĠĠĠĠĠ Ġchannel ?. set MethodCall Handler ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġteardown Channel () Ġ{ ĊĠĠĠĠĠĠĠ Ġchannel ?. set MethodCall Handler ( null ) ĊĠĠĠĠĠĠĠ Ġchannel Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġdispose Activity () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Plugin Binding ?. remove Activity Result Listener ( this ) ĊĠĠĠĠĠĠĠ Ġactivity Plugin Binding Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Activity () Ġ{ ĊĠĠĠĠĠĠĠ Ġdispose Activity () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Re attached To Activity For Config Changes ( binding : ĠActivity Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Attached To Activity ( binding ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Activity ( binding : ĠActivity Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Plugin Binding Ġ= Ġbinding ĊĠĠĠĠĠĠĠ Ġactivity Ġ= Ġbinding . activity ĊĠĠĠĠĠĠĠ Ġbinding . add Activity Result Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Activity For Config Changes () Ġ{ ĊĠĠĠĠĠĠĠ Ġon Detached From Activity () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠPending Operation Ġconstructor ( val Ġmethod : ĠString , Ġval Ġresult : ĠResult ) ĊĊĠĠĠ Ġprivate Ġfun Ġfinish Pending Operation With Success () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( pending Operation !!. method , Ġ" success ") ĊĠĠĠĠĠĠĠ Ġpending Operation !!. result . success ( true ) ĊĠĠĠĠĠĠĠ Ġpending Operation Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfinish Pending Operation WithError ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . i ( pending Operation !!. method , Ġ" error ") ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFirebase Auth Exception Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Operation !!. result . error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . errorCode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . localized Message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠApiException Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Operation !!. result . error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . statusCode . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception . localized Message , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Operation !!. result . error (" error ", Ġexception . localized Message , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Operation Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠRC _ SIGN _ IN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠAuth . Google SignIn Api . get SignIn Result From Intent ( data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsign In Account Ġ= Ġresult ?. signIn Account ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result ?. is Success Ġ== Ġtrue Ġ&& Ġsign In Account Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle SignIn Result () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish Pending Operation WithError ( ApiException ( result ?. status Ġ?: ĠStatus ( 0 ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon MethodCall ( call : ĠMethod Call , Ġresult : ĠResult ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( call . method ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMethods . signIn With Game Service Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠMethods . signIn With Game Service ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclientId Ġ= Ġcall . argument < String >(" client _ id ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg Result Ġ= Ġresult ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsilent SignIn () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMethods . link Game Services Credentials To CurrentUser Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= ĠMethods . link Game Services Credentials To CurrentUser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclientId Ġ= Ġcall . argument < String >(" client _ id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforce SignIn If Credential Already Used Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . argument < Boolean >(" force _ sign _ in _ credential _ already _ used ") Ġ== Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg Result Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsilent SignIn () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġresult . not Implemented () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }