এই উত্তরটি পোস্ট করার পিছনে কারণটি হ'ল আমি অনেকগুলি সমাধানের চেষ্টা করেছি তবে কেউই সঠিকভাবে কাজ করে না, প্রথমবার কুকি সেট করতে হবে এমন ফলাফলের বেশিরভাগ উত্তর কাজ করে না, এবং ফলাফল কুকি প্রথমবার সিঙ্ক না করে, এই সমাধানটি ব্যবহার করুন এটি উভয়ের জন্যই কার্যকর আইওএস> = 11.0 <= আইওএস 11 8.0 অবধি, প্রথমবার কুকি সিঙ্কের সাথেও কাজ করে।
আইওএস> = 11.0
- সুইফট 4.2
HTTP কুকিজ পান এবং wkwebview কুকি স্টোরকে এভাবে সেট করুন , আপনার অনুরোধটি ডাব্লুউইউউবিউতে লোড করা খুব জটিল বিষয় , কুকিজ সম্পূর্ণরূপে সেট হওয়ার সময় লোডিংয়ের জন্য অনুরোধ পাঠাতে হবে, আমি এখানে লিখেছি যে ফাংশনটি এখানে রয়েছে।
এর মাধ্যমে কল করুন ফাংশন অবসান সম্পূর্ণতে আপনি লোড WebView কল। এফওয়াইআই এই ফাংশনটি কেবল আইওএস> = 11.0 হ্যান্ডেল করে
self.WwebView.syncCookies {
if let request = self.request {
self.WwebView.load(request)
}
}
সিঙ্ককুকিজ ফাংশনটির জন্য এখানে বাস্তবায়ন দেওয়া হচ্ছে ।
func syncCookies(completion:@escaping ()->Void) {
if #available(iOS 11.0, *) {
if let yourCookie = "HERE_YOUR_HTTP_COOKIE_OBJECT" {
self.configuration.websiteDataStore.httpCookieStore.setCookie(yourCookie, completionHandler: {
completion()
})
}
} else {
//Falback just sent
completion()
}
}
আইওএস 8 এর জন্য আইওএস 11 পর্যন্ত
আপনাকে ডাব্লুউইউএসএসর স্ক্রিপ্ট ব্যবহারের মাধ্যমে দু'বারের কুকিজ সেট করতে আপনার অতিরিক্ত কিছু জিনিস সেটআপ করতে হবে এবং অনুরোধে কুকিজ যুক্ত করতে ভুলবেন না, অন্যথায় আপনার কুকিটি প্রথমবার সিঙ্ক হয় না এবং আপনি পৃষ্ঠাটি প্রথমবার ঠিকমতো লোড না করে দেখবেন। এটি হ্যাক যা আমি iOS 8.0 এর জন্য কুকিজ সমর্থন করতে দেখেছি
আপনার আগে Wkwebview অবজেক্ট তৈরি।
func setUpWebView() {
let userController: WKUserContentController = WKUserContentController.init()
if IOSVersion.SYSTEM_VERSION_LESS_THAN(version: "11.0") {
if let cookies = HTTPCookieStorage.shared.cookies {
if let script = getJSCookiesString(for: cookies) {
cookieScript = WKUserScript(source: script, injectionTime: .atDocumentStart, forMainFrameOnly: false)
userController.addUserScript(cookieScript!)
}
}
}
let webConfiguration = WKWebViewConfiguration()
webConfiguration.processPool = BaseWebViewController.processPool
webConfiguration.userContentController = userController
let customFrame = CGRect.init(origin: CGPoint.zero, size: CGSize.init(width: 0.0, height: self.webContainerView.frame.size.height))
self.WwebView = WKWebView (frame: customFrame, configuration: webConfiguration)
self.WwebView.translatesAutoresizingMaskIntoConstraints = false
self.webContainerView.addSubview(self.WwebView)
self.WwebView.uiDelegate = self
self.WwebView.navigationDelegate = self
self.WwebView.allowsBackForwardNavigationGestures = true // A Boolean value indicating whether horizontal swipe gestures will trigger back-forward list navigations
self.WwebView.addObserver(self, forKeyPath: #keyPath(WKWebView.estimatedProgress), options: .new, context: nil)
self.view.addConstraint(NSLayoutConstraint(item: WwebView, attribute: .trailing, relatedBy: .equal, toItem: self.webContainerView, attribute: .trailing, multiplier: 1, constant: 0))
self.view.addConstraint(NSLayoutConstraint(item: WwebView, attribute: .leading, relatedBy: .equal, toItem: self.webContainerView, attribute: .leading, multiplier: 1, constant: 0))
self.view.addConstraint(NSLayoutConstraint(item: WwebView, attribute: .top, relatedBy: .equal, toItem: self.webContainerView, attribute: .top, multiplier: 1, constant: 0))
self.view.addConstraint(NSLayoutConstraint(item: WwebView, attribute: .bottom, relatedBy: .equal, toItem: self.webContainerView, attribute: .bottom, multiplier: 1, constant: 0))
}
জেএসসি কুকিস্ট্রিং এই ফাংশনটিতে ফোকাস করুন
public func getJSCookiesString(for cookies: [HTTPCookie]) -> String? {
var result = ""
let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
dateFormatter.dateFormat = "EEE, d MMM yyyy HH:mm:ss zzz"
for cookie in cookies {
if cookie.name == "yout_cookie_name_want_to_sync" {
result += "document.cookie='\(cookie.name)=\(cookie.value); domain=\(cookie.domain); path=\(cookie.path); "
if let date = cookie.expiresDate {
result += "expires=\(dateFormatter.string(from: date)); "
}
if (cookie.isSecure) {
result += "secure; "
}
result += "'; "
}
}
return result
}
এখানে অন্য পদক্ষেপ উইকিউসারস্ক্রিপ্ট তত্ক্ষণাত কুকিগুলি সিঙ্ক করে না, সেখানে কুকির সাথে প্রথমবারের পৃষ্ঠাটি লোড করার জন্য প্রচুর হেক হ'ল ওয়েবভিউ পুনরায় লোড করা যদি এটি প্রক্রিয়াটি শেষ করে তবে আমি এটি ব্যবহার করার পরামর্শ দিই না, এটি ব্যবহারকারীর দৃষ্টিকোণের জন্য ভাল নয় one , হ্যাক আপনি যখনই অনুরোধ শিরোনামে অনুরোধ কুকিজ লোড করতে প্রস্তুত হন তেমনি এইভাবে, আইওএস সংস্করণ চেক যুক্ত করতে ভুলবেন না। লোড অনুরোধ আগে এই ফাংশন কল।
request?.addCookies()
আমি URLRequest জন্য এক্সটেনশন লিখেছি
extension URLRequest {
internal mutating func addCookies() {
//"appCode=anAuY28ucmFrdXRlbi5yZXdhcmQuaW9zLXpOQlRTRmNiejNHSzR0S0xuMGFRb0NjbUg4Ql9JVWJH;rpga=kW69IPVSYZTo0JkZBicUnFxC1g5FtoHwdln59Z5RNXgJoMToSBW4xAMqtf0YDfto;rewardadid=D9F8CE68-CF18-4EE6-A076-CC951A4301F6;rewardheader=true"
var cookiesStr: String = ""
if IOSVersion.SYSTEM_VERSION_LESS_THAN(version: "11.0") {
let mutableRequest = ((self as NSURLRequest).mutableCopy() as? NSMutableURLRequest)!
if let yourCookie = "YOUR_HTTP_COOKIE_OBJECT" {
// if have more than one cookies dont forget to add ";" at end
cookiesStr += yourCookie.name + "=" + yourCookie.value + ";"
mutableRequest.setValue(cookiesStr, forHTTPHeaderField: "Cookie")
self = mutableRequest as URLRequest
}
}
}
}
এখন আপনি আইওএস> 8 পরীক্ষার জন্য প্রস্তুত