package Ġcom . k iven . push library Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġcom . k iven . k utils . log Helper . K Log Ċ import Ġcom . k iven . k utils . tools . K App Helper Ċ import Ġcom . k iven . k utils . tools . K Context Ċ import Ġcom . s xb . k utils _ k tx . util . K Web Ċ import Ġorg . json . JSONObject Ċ Ċ @ Suppress Lint (" Static Field Leak ") Ċ internal Ġobject ĠWeb Ġ{ ĊĠĠĠ Ġvar Ġcontext : ĠContext ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġshould WebSocket : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġvar Ġproject Key Ġ= Ġ" project Key _ sample " ĊĊĠĠĠ Ġvar Ġis https Ġ= Ġtrue ĊĠĠĠ Ġvar Ġhost Ġ= Ġ" push . s xb car . com " ĊĠĠĠ Ġvar Ġis Debug Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġhttp Pre ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"${ if Ġ( is https ) Ġ" https " Ġelse Ġ" http "} :// $ host / api /" ĊĠĠĠ Ġprivate Ġval Ġregister Url ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"${ http Pre } open / push / register " ĊĠĠĠ Ġprivate Ġval Ġbind Account Url ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"${ http Pre } open / push / bind Account " ĊĠĠĠ Ġprivate Ġval Ġset Tags Url ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"${ http Pre } open / push / set Tags " ĊĠĠĠ Ġprivate Ġval Ġmsg CallBack ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"${ http Pre } open / push / msg CallBack " ĊĊĠĠĠ Ġprivate Ġval Ġws Pre ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"${ if Ġ( is https ) Ġ" wss " Ġelse Ġ" ws "} :// $ host / socket " ĊĊĠĠĠ Ġ// ĠTODO : Ġ 2 0 2 0 / 5 / 1 5 Ġ Ġæĭ ¿ åıĸ è¿ĻäºĽ åĢ¼ çļĦæĹ¶åĢĻ éľĢè¦ģ æ³¨æĦı ï¼Į ä¸įæĺ¯ è®¾ç½® åĲİ é©¬ ä¸Ĭ å°± èĥ½ æĭ¿ åĪ° æŃ£ç¡® çļĦåĢ¼ ï¼Į éľĢè¦ģ çŃīå¾ħ ä¸İ æľįåĬ¡åĻ¨ åĲĮæŃ¥ å®ĮæĪĲ åĲİ æīįèĥ½ æĭ¿ åĪ° æŃ£ç¡® çļĦåĢ¼ ĊĠĠĠ Ġvar Ġtoken Or Id : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġplatform : ĠInt Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPush Util . platform Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġvar Ġaccount : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġtag Or Topics : ĠString Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġprivate Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold V Ġ= Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Tags Change ?. invoke ( old V , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ æłĩçŃ¾ è®¾ç½® æĪĲåĬŁ åĲİçļĦ åĽŀè°ĥ æĸ¹æ³ķ ï¼Į çĶ¨äºİ éĢļçŁ¥ åĲĦ å¹³åı° helper ä¿®æĶ¹ tag æĪĸ topic ĊĠĠĠ Ġvar Ġon Tags Change : Ġ(( old Tags : ĠString , Ġnew Tags : ĠString ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġplatform N Ġ è®¾å¤ĩ ç±»åŀĭ Ġ 0 Ġä¸į æĺİ ï¼Į 1 ĠiOS , Ġ 2 Ġ åįİ ä¸º , Ġ 3 Ġv ivo , Ġ 4 Ġopp o , Ġ 5 Ġå°ı ç±³ , Ġ 6 Ġfirebase ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġregister ( context : ĠContext , Ġtoken Or Id N : ĠString , Ġplatform N : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( token Or Id Ġ== Ġtoken Or Id N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠ Ġtoken Or Id Ġ= Ġtoken Or Id N ĊĠĠĠĠĠĠĠ Ġplatform Ġ= Ġplatform N ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( platform N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæıĲ åīį çĶŁæĪĲ channel ï¼Į åı¯ éĺ² æŃ¢ ç³»ç»Ł çĶŁæĪĲ é»ĺè®¤ channel çļĦ çĽ¸åħ³ åıĤæķ° ï¼Į å¦Ĥ åĲįç§° ï¼Į è¯´æĺİ ï¼Į çŃī çº§ çŃī ãĢĤ ç³»ç»Ł é»ĺè®¤ çļĦ ch nn el Id ä¸º " com . hu awei . android . push agent . low " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæµ ĭ è¯ķ åĲİ åıĳçİ° ï¼Į å½ĵ æľī ç³»ç»Ł æİ¨ éĢģ æĹ¶ ï¼Į ä¼ļ å°Ĩ " com . hu awei . android . push agent . low " çļĦåıĤæķ° éĩį ç½® ãĢĤ ä½Ĩæĺ¯ ä¹ĭåīį æĺ¯ åħ³éĹŃ çļĦè¯Ŀ ï¼Į ç³»ç»Ł ä¸įä¼ļ éĩį ç½® ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPush Util . init Channel ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġregister TaskId Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġregister ( register TaskId , Ġtoken Or Id N , Ġplatform N ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġregister TaskId Ġ= Ġ 0 L ĊĠĠĠ Ġprivate Ġfun Ġregister ( taskId : ĠLong , Ġtoken Or Id N : ĠString , Ġplatform N : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( register TaskId Ġ!= ĠtaskId ) Ġreturn ĊĊĠĠĠĠĠĠĠ ĠThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠK Web . request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister Url , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" project Key " Ġto Ġproject Key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" token Or Id " Ġto Ġtoken Or Id N , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" platform " Ġto Ġplatform N , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" isDebug " Ġto Ġis Debug , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æľįåĬ¡åĻ¨ éĶĻè¯¯ æĹ¥å¿Ĺ éľĢè¦ģ ï¼Į ä¸ºäºĨ è®°å½ķ æĺ¯ åĵª æ¬¾ æīĭæľº éĻ¤äºĨ æĸ°çļĦ token éķ¿åº¦ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" brand And Model " Ġto Ġ"${ Build . B RAND } Ġ- Ġ${ Build . MODEL }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhostname Verifier Ġ= Ġ! host . startsWith (" 1 9 2 . 1 6 8 .") // Ġ æľ¬åľ° çĶµ èĦĳ ä¸į éªĮè¯ģ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSONObject ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( json . getInt (" status ") Ġ!= Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 Ġ* Ġ 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister ( taskId , Ġtoken Or Id N , Ġplatform N ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . opt JSONObject (" data ") ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Ġ= Ġopt String (" account ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtags Ġ= Ġopt String (" tag Or Topics ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tags . startsWith ("," )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= Ġtags . substring ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tags . endsWith ("," )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= Ġtags . substring ( 0 , Ġtags . length Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Or Topics Ġ= Ġtags ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK Log . e ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġåľ¨ æłĩçŃ¾ åĴĮ è´¦åı· è®¾ç½® å®ĮæĪĲ åĲİ ï¼Į åĨį è®¾ç½® token åĴĮ å¹³åı° ï¼Į éĺ² æŃ¢ bind Account () åĴĮ set Tags () ä¸¤ä¸ª æĸ¹æ³ķ åĪ¤æĸŃ å¤± è¯¯ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Or Id Ġ= Ġtoken Or Id N ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplatform Ġ= Ġplatform N ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should WebSocket ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġservice Ġä¸į åħģè®¸ åľ¨ åĲİåı° åĲ¯åĬ¨ ï¼ļ java . lang . IllegalStateException : ĠNot Ġallowed Ġto Ġstart Ġservice ĠIntent Ġ{ Ġcmp = com . j ee inc . save . w orry / com . k iven . push library . Push Service Ġ( has Ġextras ) Ġ}: Ġapp Ġis Ġin Ġbackground Ġuid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstart Success Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ(! start Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Service ( Intent ( this , ĠPush Service :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ ws Pre }? project Key =${ Uri . encode ( project Key )} & token Or Id =${ Uri . encode ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Or Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" platform ", Ġplatform ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Success Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK Log . e (" è¿Ľç¨ĭ åĲį ï¼ļ ${ K App Helper . getInstance (). process Name _ }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK Log . e ( e ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 Ġ* Ġ 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK Log . e ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 Ġ* Ġ 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister ( taskId , Ġtoken Or Id N , Ġplatform N ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġbind Account ( account N : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( account . isNotEmpty () Ġ&& Ġaccount Ġ== Ġaccount N ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġaccount Ġ= Ġaccount N ĊĊĠĠĠĠĠĠĠ Ġaccount TaskId Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġbind Account ( account TaskId , Ġaccount N ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġaccount TaskId Ġ= Ġ 0 L ĊĠĠĠ Ġprivate Ġfun Ġbind Account ( taskId : ĠLong , Ġaccount N : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( account TaskId Ġ!= ĠtaskId ) Ġreturn ĊĊĠĠĠĠĠĠĠ ĠThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( token Or Id . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è®¾å¤ĩ æ³¨åĨĮ å®ĮæĪĲ åĲİ ï¼Į å¾Ĺ çŁ¥ å·² ç»ĳå®ļ è¯¥ è´¦åı· ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( account Ġ== Ġaccount N ) Ġreturn @ Thread ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠK Web . request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Account Url , Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" project Key " Ġto Ġproject Key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" token Or Id " Ġto Ġtoken Or Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" account " Ġto Ġaccount N ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġhostname Verifier Ġ= Ġ! host . startsWith (" 1 9 2 . 1 6 8 .") // Ġ æľ¬åľ° çĶµ èĦĳ ä¸į éªĮè¯ģ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSONObject ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( json . getInt (" status ") Ġ!= Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 Ġ* Ġ 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Account ( taskId , Ġaccount N ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Ġ= Ġaccount N ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK Log . e ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 Ġ* Ġ 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Account ( taskId , Ġaccount N ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġset Tags ( tag Or Topics N : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( tag Or Topics . isNotEmpty () Ġ&& Ġtag Or Topics Ġ== Ġtag Or Topics N ) Ġreturn Ċ // ĠĠĠĠĠĠĠ Ġtag Or Topics Ġ= Ġtag Or Topics N ĊĊĠĠĠĠĠĠĠ Ġtags TaskId Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġset Tags ( tags TaskId , Ġtag Or Topics N ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġtags TaskId Ġ= Ġ 0 L ĊĠĠĠ Ġprivate Ġfun Ġset Tags ( taskId : ĠLong , Ġtag Or Topics N : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( tags TaskId Ġ!= ĠtaskId ) Ġreturn ĊĊĠĠĠĠĠĠĠ ĠThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( token Or Id . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è®¾å¤ĩ æ³¨åĨĮ å®ĮæĪĲ åĲİ ï¼Į å¾Ĺ çŁ¥ å·² ç»ĳå®ļ è¯¥ æłĩçŃ¾ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tag Or Topics Ġ== Ġtag Or Topics N ) Ġreturn @ Thread ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠK Web . request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Tags Url , Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" project Key " Ġto Ġproject Key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" token Or Id " Ġto Ġtoken Or Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tag Or Topics " Ġto Ġtag Or Topics N ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġhostname Verifier Ġ= Ġ! host . startsWith (" 1 9 2 . 1 6 8 .") // Ġ æľ¬åľ° çĶµ èĦĳ ä¸į éªĮè¯ģ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSONObject ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( json . getInt (" status ") Ġ!= Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 Ġ* Ġ 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Tags ( taskId , Ġtag Or Topics N ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Or Topics Ġ= Ġtag Or Topics N ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK Log . e ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 Ġ* Ġ 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Tags ( taskId , Ġtag Or Topics N ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonClick ( msg Unicode : ĠString , Ġis Debug : ĠBoolean , Ġserver Key : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( token Or Id . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 5 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( platform Ġ== Ġ 5 ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå°ı ç±³ ç³»ç»Ł æľī çĤ¹åĩ» åĽŀè°ĥ ï¼Į è¿ĻéĩĮ å°± ä¸į ä¸Ĭä¼ł äºĨ , Ġ ä½Ĩæĺ¯ æłĩçŃ¾ æİ¨ éĢģ å¥½ åĥı æ²¡æľī åĽŀè°ĥ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Thread Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠK Web . request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg CallBack , Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" project Key " Ġto Ġproject Key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" token Or Id " Ġto Ġtoken Or Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" platform " Ġto Ġplatform , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" msg Unicode " Ġto Ġmsg Unicode , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" isDebug " Ġto Ġis Debug , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġto Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" server Key " Ġto Ġserver Key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġhostname Verifier Ġ= Ġ! host . startsWith (" 1 9 2 . 1 6 8 .") // Ġ æľ¬åľ° çĶµ èĦĳ ä¸į éªĮè¯ģ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSONObject ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( json . getInt (" status ") Ġ!= Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 Ġ* Ġ 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick ( msg Unicode , Ġis Debug , Ġserver Key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK Log . e ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 Ġ* Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick ( msg Unicode , Ġis Debug , Ġserver Key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} Ċ }