[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)
            }

        }
    }

[Swift] インターネットに接続できるか確認する

以下のコードで確認できます。ちなみにSwiftのバージョンは2.0です。

Reachability.swift

import Foundation
import SystemConfiguration

public class Reachability {


    class func isConnectedToNetwork() -> Bool {

        var status:Bool = false

        let url = NSURL(string: "https://google.com")
        let request = NSMutableURLRequest(URL: url!)
        request.HTTPMethod = "HEAD"
        request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData
        request.timeoutInterval = 10.0

        var response:NSURLResponse?

        do {
            let _ = try NSURLConnection.sendSynchronousRequest(request, returningResponse: &response) as NSData?
        }
        catch let error as NSError {
            print("error happened")
            print(error.localizedDescription)
        }

        if let httpResponse = response as? NSHTTPURLResponse {
            if httpResponse.statusCode == 200 {
                status = true
            }
        }
        return status
    }
}


使い方

let isOnline = Reachability.isConnectedToNetwork()

FlaskでWhiteNoiseを使って静的ファイルを配信する

WhiteNoiseとは?

WhiteNoiseはAmazon S3等の外部ストレージサービスを使用することなく静的ファイルを配信するライブラリです。
Herokuを使った時の静的ファイル配信を行う際にWhiteNoiseを使うと大変開発がはかどります。

Djangoでの使い方はREADMEに載っていたのですが、Flaskでも使えることが出来ましたのでメモしておきます。

Install

$ pip install whitenoise

Code

staticフォルダーを静的ファイルとして配信する場合は以下の様になります。

from whitenoise import WhiteNoise


app = Flask(__name__)
_app = WhiteNoise(app, root='./static/')


@app.route("/")
def index():
    return "hello"
...

FormをSubmitするときにバリデーションをかける

onSubmitがfalseの時はSubmitしないので、バリデーションはonSubmitにbool値を返す関数を使用すれば実現できる。


    <form method="POST" action="foo" onSubmit="if(confirm('FormをSubmitしますか?') == false ){return false;}">
      <input type="text" name="message" placeholder="文言を入力してください">
      <input type="submit" />
    </form>