iOS SDK - اعتراض الشبكة

تفاصيل حول اعتراض الشبكة لمتعقّب iOS

iOS SDK ⁠-⁠ اعتراض الشبكة

يُصدّر ORTracker الكائن NetworkListener الذي يقبل المهام والطلبات معًا، وإليك كيفية القيام بذلك:

import ORTracker

func fetchPokemonData(for name: String) {
    let networkListener = NetworkListener()
    let url = URL(string: "https://pokeapi.co/api/v2/pokemon/ditto")!
    var request = URLRequest(url: url)
    request.httpMethod = "GET" // This is the default, so it's optional in this case.

    // Start the network listener with the request
    networkListener.start(request: request)

    // Create a data task
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        if let error = error {
            print("Error: \(error.localizedDescription)")
            return
        }
        
        if let data = data {
            do {
                let json = try JSONSerialization.jsonObject(with: data, options: [])
								print(json)
            } catch {
                print("Error deserializing JSON: \(error)")
            }
        }
        
        networkListener.finish(response: response, data: data)
    }

    task.resume()

	}

يُصدَّر مفتاحان لتقليم بيانات الطلب/الاستجابة تلقائيًا: ignoredKeys للجسم وignoredHeaders للترويسات. سيتم تنقية كلٍّ من الطلب والاستجابة، لكن الجسم لن يتأثر إلا إذا كان JSON صالحًا.

ما عليك سوى تعيين قائمة من السلاسل النصية التي ترغب في تنقيتها:

let networkListener = NetworkListener()
networkListener.ignoredHeaders = ["mySecretToken"]
networkListener.ignoredKeys = ["password"]

من الممكن أيضًا تعديل بيانات الاستجابة قبل تمريرها إلى المستمع:

// ... request

var sanitizedData
if let data = data {
	do {
		let json = try JSONSerialization.jsonObject(with: data, options: [])
		sanitizedData = customSanitizeFunction(data)
		print(json)
	} catch {
		print("Error deserializing JSON: \(error)")
	}
}

networkListener.finish(response: response, data: sanitizedData)

إذا كانت لديك أي أسئلة حول هذه العملية، فلا تتردد في التواصل معنا عبر Slack الخاص بنا أو الاطلاع على المنتدى الخاص بنا.