-

   rss_rss_hh_new

 - e-mail

 

 -

 LiveInternet.ru:
: 17.03.2011
:
:
: 51

:


Hotspot Helper Extension

, 07 2017 . 14:21 +
Wi-Fi . , , ,, , . , , -, , -, Wi-Fi , , . , . , ( , ) (, , ), .

, , . , - , . Network Helper! , . UI , .

. NEHotspotHelper, iOS 9. Wi-Fi- . NEHotspotHelper NetworkExtension. iOS 11 :

Network Extention Framework

:Hotspot Network Subsystem Programming Guide. , . , , Hotspot Helper. GitHub.


Hotspot Helper Wi-Fi- Helper , . , Apple :

State Machine

, .

:

  1. Helper, (Evaluate).
  2. , Hotspot Helper(Authenticating).
  3. UI, Hotspot Helper (PresentingUI). , Helper (Authenticated).
  4. Hotspot Helper , (Maintain).
  5. Helper , .


: Hotspot Helper, c Maintain, .

Hotspot Helper Wi-Fi- . Hotspot Helper , ( ( silent-push ). . , . , .

, : Wi-Fi-Hotspot Helper . , , StateMachine Authenticated. , Hotspot Helper Evaluate. Reachability, .

, NEHotspotHelper target, extension, , Hotspot Helper. , , - , . , , . , .


Hotspot Helper Apple. Team Agent .
:
_1 _2

, provisioning profile https://developer.apple.com entitlement com.apple.developer.networking.HotspotHelper, .

Provisioning
, Background Mode Capability Info.plist UIBackgroundModesnetwork-authentication. .


Hotspot Helper, . :

class NEHotspotHelper
    class func register(options: [String : NSObject]? = nil, queue: DispatchQueue, 
                        handler: @escaping NetworkExtension.NEHotspotHelperHandler) -> Bool


:
  • . :kNEHotspotHelperOptionDisplayName Hotspot Helper, Wi-Fi- , HH ( ). , . Apple, .
  • , , . Ÿ , .
  • . . :

    typealiasNEHotspotHelperHandler = (NEHotspotHelperCommand) ->Void
    

    . , .


Helper . false. , , .

. , , c .

, ( , ), Wi-Fi- Hotspot Helper ( ).


NEHotspotHelperCommand, , ( , ).
NEHotspotHelperResponse , .
NEHotspotHelperResponse :

 funccreateResponse(_result:NEHotspotHelperResult) ->NEHotspotHelperResponse

, TCP-UDP- , , :

funccreateTCPConnection(_endpoint:NWEndpoint) ->NWTCPConnection
funccreateUDPSession(_endpoint:NWEndpoint) ->NWUDPSession

NSURLRequest. , Hotspot Helper , Wi-Fi-. -. IYKWIM

 funcbind(to command:NEHotspotHelperCommand)

, Hotspot Helper, , . State Machine, .

45 (, , 60 ). , Hotspot Helper. , , , Wi-Fi Status Bar. , , Hotspot Helper, , ( ).

NEHotspotHelperCommandType.filterScanList


, , , StateMachine . Hotspot Helper, , 5 . , Wi-Fi- Settings.app.

, Hotspot Helper. :

varnetworkList: [NEHotspotNetwork]? { get }

, . .

, Hotspot Helper , . , Helper . .

, Hotspot Helper , . , Hotspot Helper kNEHotspotHelperOptionDisplayName. . ( ), -, , .

, , . . , . , , . , .

:

letnetwork = 
network.setPassword("PASSWORD")
letresponse = command.createResponse(.success)
response.setNetworkList([network])
response.deliver()

:
Wi-Fi-_1 Wi-Fi-_2

, filterScanList . Hotspot Helper , , .

: , .

NEHotspotHelperCommandType.evaluate


Hotspot Helper, .
Note: evaluate , maintain Hotspot Helper, evaluate.

Hotspot Helper. Hotspot Helper , :
varnetwork:NEHotspotNetwork? { get }

Network , evaluate :

//  
varssid:String{ get }
varbssid:String{ get }

//       0.0  1.0 (, ,  )
varsignalStrength:Double{ get }

//        
varisSecure:Bool{ get }

// , ,      
//        
vardidAutoJoin:Bool{ get }

,Hotspot Helper ( ) confidence:

// Helper ,     .
casenone

// Helper ,       ,    *.
caselow

// Helper ,        .
casehigh

* , Helper, , , StateMachine evaluate, Helper .

:Apple , confidence high ( low), UX .

:

letnetwork = command.network

//      confidence...

network.setConfidence()

letresponse = command.createResponse(.success)
response.setNetwork(network)
response.deliver()

45 , . , high confidence, . Hotspot Helper , suspended state.

NEHotspotHelperCommandType.authenticate


authenticate Hotspot Helper evaluate.

, Wi-Fi-. Hotspot Helper , :

varnetwork:NEHotspotNetwork? { get }

Hotspot Helper. Hotspot Helper, , .
45 , response :

.success . .StateMachine authenticated.

.unsupportedNetwork Helper: evaluate. StateMachine evaluate, Helper . , , Helper low confidence evaluate, , .

.uiRequired . , - . : UI .

:Hotspot HelperUILocalNotification, . , . ,StateMachine presentingUI .

.temporaryFailure . , .StateMachine failure, .

.failure ( , ) . - , : , , .StateMachine failure, ., temporaryFailure, auto-join.

:

letnetwork = command.network

//         
//  UILocalNotification      (.uiRequired)

command.createResponse().deliver()

NEHotspotHelperCommandType.presentUI


Hotspot Helper , uiRequired authenticate.

, . , , , UILocalNotification authenticate.

, , , , , . , .

response :

.success . . StateMachine authenticated.

.unsupportedNetwork Helper: evaluate.StateMachine evaluate, Helper . , , Helper low confidence evaluate, , .

.temporaryFailure . , . StateMachine failure, .

.failure ( , ) . - , : , , . StateMachine failure, . , temporaryFailure, auto-join.

:

letnetwork = command.network

//         
//         

command.createResponse().deliver()

NEHotspotHelperCommandType.maintain


maintain, , . Hotspot Helper evaluate :

  1. 300 ( ) Wi-Fi-.
  2. evaluate, Hotspot Helper .


, Hotspot Helper :

  • ( ) , response .success;
  • , response .authenticationRequired ( StateMachine Authenticating Hotspot Helper authenticate).
  • , ,(.temporaryFailure/.failure , ). StateMachine Evaluating Hotspot Helper, .


maintain , , didJustJoin.

:

letnetwork = command.network

ifnetwork.didJustJoin{
    //    ,      Helper
}
else{
    //    ,      (  300 .)
}

//        
//     

command.createResponse().deliver()

, Authenticated.

NEHotspotHelperCommandType.logoff


logoff, , . Hotspot Helper.

Hotspot Helper NEHotspotHelper:

classfunclogoff(_network:NEHotspotNetwork) ->Bool

, Hotspot Helper, , . false .

StateMachine LoggingOff, Hotspot Helper 45 .

, , :

letnetwork =NEHotspotHelper.supportedNetworkInterfaces().first

use-case: UI , presentUI.

Hotspot Helper ( ),StateMachine inactive, Wi-Fi-.

:

letnetwork = command.network

//  logoff      

letresponse = command.createResponse(.success).deliver()

, - , UX ( , ).


Hotspot Helper. , , , :

  • Hotspot Helper .

  • Hotspot Helper , . , background fetch, low power mode ..

  • Hotspot Helper ( logoff : Helper). , reachability( , ).

  • , , :

    letnetwork =NEHotspotHelper.supportedNetworkInterfaces().first

    , , swift- ( non-optional- ) ( ), SSID BSSID 0.0. , , nil ( crash). , .

    Note:C iOS 11 .

  • , StateMachine Authenticated. reachbility, , Hotspot Helper .

    , , reachability Wi-Fi, Hotspot Helper . , :

    Wi-Fi settings

    , . , , .

  • Helper .
    Hotspot Helper, . , , .

    evaluate: Hotspot Helper, high-confidence . Helper. Helper , . , Hotspot Helper .

    , -Helper. : , . Apple UI ( SSID).

    , - Hotspot Helper . , , , Hotspot Helper . :

    letnetwork =NEHotspotHelper.supportedNetworkInterfaces().first
    if!network.isChosenHelper{
         // Hotspot Helper    
    }

    ,false , Helper (, evaluate). , , . .

  • , . :

    funccreateTCPConnection(_endpoint:NWEndpoint) ->NWTCPConnection
    funccreateUDPSession(_endpoint:NWEndpoint) ->NWUDPSession

    NSMutableURLRequest:

    funcbind(to command:NEHotspotHelperCommand)

  • iOS10.3, , . - , . : . , - .

    , , .

  • iOS 11 NEHotspotHelper NEHotspotConfigurationManager, Wi-Fi . . :
    • , (, - .);
    • , Wi-Fi- (, ). .


NEHotspotHelper, , . . , , . , Helper, .

, , . , - , , .


  1. GitHub
  2. Hotspot Network Subsystem Programming Guide
  3. Network Extension
  4. NEHotspotHelper reference
  5. WWDC15 What's New in Network Extension and VPN
  6. WWDC17 Advances in Networking, Part 1
  7. Forum: How to cancel register an app as a Hotspot Helper (NEHotspotHelper)?
  8. Forum: entitlements
  9. Forum: UI
  10. HotspotHelper
Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/335028/

:  

: [1] []
 

:
: 

: ( )

:

  URL