UIColorの値をNSUserDefaultに保存する

UIColorシリアライズすることでNSUserDefaultsに保存することができる。

UIColorをNSUserDefaultsに保存

  let data = NSKeyedArchiver.archivedDataWithRootObject(button.backgroundColor!)

  NSUserDefaults.standardUserDefaults().setObject(data, forKey: "colorscheme")
  NSUserDefaults.standardUserDefaults().synchronize()

UIColorをNSUserDefaultsから取り出す

if let _data:NSData = NSUserDefaults.standardUserDefaults().objectForKey("colorscheme") as? NSData {
    // savedColor: NSUserDefaultsに保存したUIColor  
   if let savedColor  = NSKeyedUnarchiver.unarchiveObjectWithData(_data) as? UIColor {
            
   }
}

[swift] UserAgentを設定する

要件

UIWebViewから来たリクエストのUserAgentを”ios-webview”に変更したい。

Code

func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool { ...
    
    let str = "ios-webview"
    let dic:NSDictionary = ["UserAgent":str]
    NSUserDefaults.standardUserDefaults().registerDefaults(dic)

iOSアプリのUIWebViewから来たかどうかを判定する

detect.js

var isFromUIWebView = (window.navigator.userAgent.indexOf("ios-webview") !== -1);
if (isFromUIWebView === true) {
    console.log("from uiwebview");
}

現在のUIViewControllerを取得する

Code

extension UIApplication {
    class func topViewController(base: UIViewController? = UIApplication.sharedApplication().keyWindow?.rootViewController) -> UIViewController? {
        if let nav = base as? UINavigationController {
            return topViewController(nav.visibleViewController)
        }
        if let tab = base as? UITabBarController {
            if let selected = tab.selectedViewController {
                return topViewController(selected)
            }
        }
        if let presented = base?.presentedViewController {
            return topViewController(presented)
        }
        return base
    }
}

使い方

if let vc  = UIApplication.topViewController()  {
   // write something.
}

[Swift] プッシュ通知を受信したタイミングでバッジの更新を行う

実装 [iOS]

Push通知の登録

application:didFinishLaunchingWithOptions:に


    let userNotificationTypes: UIUserNotificationType = [UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound]
    let settings = UIUserNotificationSettings(forTypes: userNotificationTypes, categories: nil)
    application.registerUserNotificationSettings(settings)

BackgroundFetchを有効にする

XCode → Capabilities → BackgroundModes → BackgroundFetch,Remote notifications
の項目にチェックを入れます。

プッシュ通知を受け取ったらバッジを更新

プッシュ通知を受け取ったらバッジを更新するためにはSilent Push Notificationを発行する必要があります。

Silent Push Notificationとは、Payloadに”content-available”のみを送信するプッシュ通知で、これによってBackgroundFetchを発動させることができます。今回はBackgroundFetchによってバッジの更新を行ってみます。

以下のコードをAppDelegate.mに書きます。以下のコードはSilent Push Notificationを受け取った時に呼ばれます。

  func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
       UIApplication.sharedApplication().applicationIconBadgeNumber = UIApplication.sharedApplication().applicationIconBadgeNumber + 1

        completionHandler(.NewData)
    }

実装 [Python]

今回はPyParseを使ってPush通知を送信してみます。

from parse_rest.connection import register
from parse_rest.installation import Push


register(APPLICATION_ID, REST_API_KEY)

channel_name = "some_channel_name"


# PushNotificationを送信
Push.alert({
                'alert': msg,
            }, channels=[channel_name])


# SilentPushNotificationを送信
Push.alert({
    'alert': '',
    'content-available': 1
}, channels=[channel_name])

プッシュ通知がユーザーに届いたタイミングでバッジを更新させるにはプッシュ通知を行った後にSilentPushNotificationを発行すれば、バッジを更新できます。

[swift] Cookieの保有期限を更新する

以下のコードでCookieの保有期限を1週間後に更新できる。


    func updateCookies() {
        let cookieStorage = NSHTTPCookieStorage.sharedHTTPCookieStorage()
        if let cookies = cookieStorage.cookies  {
            for cookie in cookies {
                var cookieProperties = [String: AnyObject]()
                cookieProperties[NSHTTPCookieExpires] = NSDate().dateByAddingTimeInterval(60 * 60 * 24 * 7)
            }

        }
    }