Just My Life & My Work

儘管是在寫 App,然而三不五時就會需要內嵌網頁,因為我們實在很懶(是這樣嗎?),不想要再自己重刻一個頁面~😜

廣告

除此之外,做 Web 端的同仁也想知道,這個網頁的執行是來自哪裡,他們通常會從 User Agent (用戶代理) 下手,此時就會請求我把一些資訊塞進 User Agent

這種做法其實相當簡單呢!現在 iOS 可藉由新的 WKWebView 來實現。

程式碼其實就是透過執行 Web Javascript 來替換 User Agent 內容~

- (void)configureWebViewUserAgent
{
    // 獲取當前UserAgent,並進行修改
    [webView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id userAgent, NSError * _Nullable error) {
        if ([userAgent isKindOfClass:[NSString class]]) {
        // Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148
        userAgent = [NSString stringWithFormat:@"Mozilla/5.0 (%@; CPU iPhone OS %@ like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148", [[UIDevice currentDevice] model], [[[UIDevice currentDevice] systemVersion] stringByReplacingOccurrencesOfString:@"." withString:@"_"]];
        }
        
        // 自定義 User Agent
        NSString *newAgent = userAgent;
        newAgent = [NSString stringWithFormat:@"%@; (happyman-studio) App Version: %@", userAgent, [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]];

        // 一定要設定 customUserAgent,否則執行 navigator.userAgent 拿不到 userAgent
        self->webView.customUserAgent = newAgent;
        NSDictionary *dictionnary = [[NSDictionary alloc] initWithObjectsAndKeys:newAgent, @"UserAgent", nil];
        [[NSUserDefaults standardUserDefaults] registerDefaults:dictionnary];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }];
}

在有 WebView 的環境下,執行以上的程式碼,即可設定完成!

廣告

怎麼知道設定成功?再執行一次:

    [webView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id userAgent, NSError * _Nullable error) {

    }];

其中 userAgent 就會返回:

Mozilla/5.0 (iPhone; CPU iPhone OS 13_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148; (happyman-studio) App Version: 1.0

有沒有看到 happyman-studio 呀?這可是我認證過的喔~

這樣 Web 端就能知道是從哪個平台呼叫該網頁,想要更詳細的平台環境資料,也能繼續加入喔!🥳

參考:

廣告

隨意留個言吧:)~

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

標籤雲

<span>%d</span> 位部落客按了讚: