APNs(Apple Push Notification Service)

1.ユーザーがpush通知許可
2.APNsがユーザーにデバイストークンを発行
3.ユーザーがサーバーにデバイストークン登録
4.サーバーがAPNsにプッシュ通知
5.APNsがユーザーにpush通知

サーバーはニフティクラウド mobile backendを使うらしい。
http://mb.cloud.nifty.com/
mBaaSというらしい。

とりあえず、登録してましょう。

ああ、これかー、application keyとclient key

macキーチェーンアクセスでCSR(Certificate Signing Request)を取得する

まず、キーチェーンアクセスって何処にある?ジャッキーチェーン?

最初に、Utilitiesを開きます。

utilitiesから、Keychain Accessを開きます。
なんだ、簡単。

次に、Keychain Accessから、Certificate Assistant -> Request a Certificate From a Certificate Authority… を開きます。

Certificate Informationのformが開くので、User Email Addressにmacのdeveloperで登録しているメールアドレス、CA Email Addressは空欄、Request is:は、saved to disk と Let me specifiy key pair informationをチェックします。

そうすると、保存場所を聞かれるので、適当にDesktopにでも保存します。

key pair informationはそのまま、RSA 2048bitでcontinueします。

できました。OK

push通知を実装する

AppDelegate.swift で、UserNotifications, NCMBをimportする。

import UIKit
import UserNotifications
import NCMB

あれ、NCMBがインポートできない。
あれ、証明書が必要なの?

>証明書の取得
>参考1(GitHub):プッシュ通知の受信に必要な証明書の作り方(開発用)
>参考2(Qiita):プッシュ通知に必要な証明書の作り方2016
>ニフクラ mobile backend の無料登録(アカウント取得)
なに、事前準備がこんなにあるのか。。

そもそもCSRファイルとは?
>CSR には「公開鍵」とその所有者情報、及び申請者が対応する秘密鍵を持っていることを
>示すために申請者の署名が記載されています。 認証局は証明書にその所有者情報を
>署名することで、所有者の存在を証明しています。
>SSL 通信ではサーバが公開鍵を提示し、これを用いて暗号化通信を開始します。
公開鍵、所有者情報、秘密鍵を持っていることの証明か。

そもそも、CSRってなんの略? まさか企業の社会的責任じゃないよね? Corporate Social Responsibility?

Certificate Signing Request ですと。よかったー、安心♪

色調補正

photoshopを開き、image -> adjustment -> brightnessで修正する。

通常

明るさ補正

明るく成りましたね。
というか、クオリティ上げて行くには、photoshopもやらないといかんのか。。
なんてことだ。

swiftでhttp通信

info.plistに追加します。

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>http://hpscript.com/</key>
            <dict>
                <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                <false/>
            </dict>
        </dict>
    </dict>

php

$response = array();

if($_SERVER['REQUEST_METHOD'] == 'POST'){
	$teamName = $_POST['name'];
	$member = $_POST['old'];

	$response['api'] = "succeeded";
	$response['member'] = $member . " years old!";
	echo json_encode($response);
}

xcode console
っキタキタキタ!!!!!!!!!!!!!!!!!!!!!!!!

今回、php側はjsonで返してますが、mysqlへのinsert, fetchResultもできますね。iOSの光が見えてきた。

swiftでpostする

import UIKit

class ViewController: UIViewController {
    let URL_SAVE_BOY = "http://hpscript.com/swift/index.php"
    
    @IBOutlet weak var NameFeild: UITextField!
    @IBOutlet weak var oldFeild: UITextField!
    
    @IBAction func saveBtn(_ sender: Any) {
        let requestURL = NSURL(string: URL_SAVE_BOY)
        let request = NSMutableURLRequest(url: requestURL! as URL)
        
        request.httpMethod = "POST"
        
        let teamName = NameFeild.text
        let memberOld = oldFeild.text
        
        let postParameters = "name="+teamName!+"&old="+memberOld!;
        
        request.httpBody = postParameters.data(using: String.Encoding.utf8)
        
        let task = URLSession.shared.dataTask(with: request as URLRequest){
            data, response, error in
            
            if error != nil {
                print("error is \(error)")
                return;
            }
            
            do {
                let myJSON = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
                
                if let parseJSON = myJSON {
                    var msg : String!
                    msg = parseJSON["message"] as! String?
                    print(msg)
                }
            } catch {
                print(error)
            }
        }
        task.resume()
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

@media printで印刷時だけstyleを変える

@media printで指定します。

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>The HTML5 Herald</title>
  <meta name="description" content="The HTML5 Herald">
  <link rel="stylesheet" href="">
<style>
#content1 {
	color:blue;
}
@media print{
	#content1{
		color:green;
		font-size:24px;
	}
}
</style>
</head>
<body>
<input type="button" value="印刷する" onclick="window.print();" />
	<div id="content1">
		<p>サッカーW杯ロシア大会には、総額約120億ドル(約1兆6000億円)の選手たちが集結する。3人のトップ選手、ネイマール、メッシ、C・ロナウドの価値は、ランキング下位のチームの市場価値を上回った。</p>
	</div>
</body>
</html>

font-size, font-colorが変わりました。

print()メソッドで印刷する

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>The HTML5 Herald</title>
  <meta name="description" content="The HTML5 Herald">
  <link rel="stylesheet" href="">
</head>
<body>
<input type="button" value="印刷する" onclick="window.print();" />
	<div id="content1">
		<p>サッカーW杯ロシア大会には、総額約120億ドル(約1兆6000億円)の選手たちが集結する。3人のトップ選手、ネイマール、メッシ、C・ロナウドの価値は、ランキング下位のチームの市場価値を上回った。</p>
	</div>
</body>
</html>

印刷ボタンを押すと、、

なるほど