LoginSignup
3
5

More than 5 years have passed since last update.

【iOS】クッキーをセットする【Swift3.0】

Last updated at Posted at 2017-05-19

UIWebviewにインクルードしているWebにIDFAを渡すという要件があった。会員登録が不要なコンテンツでユーザを一意に特定する手段が存在しないため、サーバサイドでIDFAを受け取るAPIを用意してDBにストックするという方法は使えない。というわけでクッキー経由でIDFAの受け渡しを実現したというメモです。

クラスメソッドを定義

汎用的に使えるように、IDFA取得とクッキーをセットするクラスメソッド2つをユーティリティクラス的なところに定義します。IDFAを扱うにはAdSupport.frameworkが必要ですので追加しておきます。

// Common(ユーティリティ)クラス

// import AdSupport


    /// getIdfaString 
    /// 
    /// - returns: IDFA
    class func getIdfaString()->String.UTF8View {

        var idfaString:String.UTF8View = "".utf8

        //IDFA
        if let myIDFA = ASIdentifierManager().advertisingIdentifier {
            idfaString = myIDFA.uuidString.utf8
        }

        return idfaString

    }

    /// setCookie
    ///
    /// - parameter key: クッキーのキー
    /// - parameter value: 値
    class func setCookie(key: String, value: AnyObject) {

        let ExpTime:Double = TimeInterval(60 * 60 * 24 * 365)

        let cookieProps: [HTTPCookiePropertyKey : Any] = [
            HTTPCookiePropertyKey.domain: Common.baseDomain,
            HTTPCookiePropertyKey.path: "/",
            HTTPCookiePropertyKey.name: key,
            HTTPCookiePropertyKey.value: value,
            HTTPCookiePropertyKey.secure: "TRUE",
            HTTPCookiePropertyKey.expires: NSDate(timeIntervalSinceNow: ExpTime)
        ]

        if let cookie = HTTPCookie(properties: cookieProps) {
            HTTPCookieStorage.shared.setCookie(cookie)
        }
    }

呼び出して使う

実際にIDFAを取得してクッキーにセットするところです。クッキー利用の許可を忘れずに。
HTTPCookieStorage.shared.cookieAcceptPolicy = HTTPCookie.AcceptPolicy.always
以下は、ad_idfaにIDFAを、ad_idfa_typeに"idfa"を、ad_optoutに"0"を設定しているサンプルコードです。

// ViewControllerクラス

    override func viewDidLoad() {
        super.viewDidLoad()


        // IDFAを取得
        let idfa = Common.getIdfaString()

        // クッキーを許可
        HTTPCookieStorage.shared.cookieAcceptPolicy = HTTPCookie.AcceptPolicy.always

        // クッキーを設定
        Common.setCookie(key: "ad_idfa", value: idfa.description as AnyObject)
        Common.setCookie(key: "ad_idfa_type", value: "idfa" as AnyObject)
        Common.setCookie(key: "ad_optout", value: "0" as AnyObject)

    }

参考 How To Set a Cookie for a UIWebView manually in Swift

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5