mixi Developer Center (ミクシィ デベロッパーセンター)

mixiページアプリ

mixiページアプリ » 技術仕様 » iOS6 SafariでのCookie有効化について

iOS6 SafariでのCookie有効化について

iOS6搭載のSafariをデフォルトの設定(※1)のまま利用してmixiページアプリを閲覧すると、Safariはアプリが設定したCookieの値を保存しないことがあります。
例えばCookieを利用してアプリのセッション管理を行っている場合、正常に動作しない可能性があります。
下記を参考に3rd Party Cookie 有効化を行ってください。

アプリの起動時に下記の3rd Party Cookie 有効化を行うと、それ以後ユーザが明示的にCookieの消去等を行わない限り、アプリがCookieを設定/読み出しできるようになります。

※1:Cookieの受け入れ設定が「訪問先のみ」の場合

3rd Party Cookie 有効化の方法

3rd Party Cookie 有効化は次の3つの手順で行います。

  1. mixi.cookie.enable()関数の呼び出し
  2. Cookie有効化スクリプトの実行
  3. アプリへリダイレクト

(1) mixi.cookie.enable()関数の呼び出し

3rd Party Cookieを設定できないブラウザの場合は、まず、アプリのスタートURLで呼び出される最初の画面にて、mixi.cookie.enable()関数を呼び出します。

mixi.cookie.enable()関数はJavaScript API で提供されていますので、事前にJavaScript API の利用準備を済ましておく必要があります。

mixi.cookie.enable()関数は以下のように実行します。

mixi.cookie.enable({
    url: "http://example.com/set_cookie.php",
    appParams: {hoge: 'fuga'}
});
項目内容
url次項で設置して頂くCookie有効化スクリプトのURL
appParams本APIを利用後アプリにリダイレクトする時に受け取りたいパラメータ。オブジェクト形式で指定。

<例> Cookieのチェック後に関数を呼び出す

mixi.cookie.enable()関数を利用する際に、関数の呼び出しとアプリへのリダイレクトがループしないように注意する必要があります。

ページアプリ内部でCookieの書き込みを行った後に呼び出されるページは次の様にCookieの存在確認をすることで必要な場合のみmixi.cookie.enable()関数を呼び出すことができます。

(function () {
    if (window.navigator.cookieEnabled && !document.cookie) {
        mixi.cookie.enable({
            url: "http://example.com/set_cookie.php",
            appParams: {hoge: 'fuga'}
        });
    }
})();

(2) Cookie有効化スクリプトの実行

mixi.cookie.enable()関数が実行されると、urlで指定したCookie有効化スクリプトがGETで呼び出されます。
Cookie有効化スクリプトには下記の処理を含め、アプリのドメイン配下に設置します。

  • 署名付きリクエストの検証
  • Cookieをセットする処理
  • GET で渡るcallback_urlパラメータへのリダイレクト処理
<例> PHPの場合

set_cookie.php

<?php
// 実際には署名付きリクエストの検証を行い、その結果正しいリクエストの場合にのみ以下処理を行う
setcookie("created_at", time(), time() + 2592000);
header("Location: " . $_GET['callback_url']);
?>
項目内容
callback_urlアプリへ処理を戻す為のリダイレクト先URL。この値は変更せず、そのままリダイレクト先に指定してください。

Cookie有効化スクリプトへのリクエストには、改ざん防止を目的とした署名(OAuth Signature)が付加されています。
悪意を持ったユーザによる不正アクセスを防ぐため、署名の検証を行い以下のチェックを行ってください。

  • mixi Platformから送信されたリクエストであること
  • リクエストの内容が改ざんされていないこと

署名方式にはRSA-SHA1を利用しています。また公開鍵はこちらに掲載されているものをご使用ください。

実際の検証方法については、署名付きリクエストの検証 に関するドキュメントを参照してください。

GET http://example.com/set_cookie.php?callback_url=http%3A%2F%2Fpage.mixi.jp%2Frun_page_apps.pl%3FappParams%3D%257B%2522hoge%2522%253A%2522fuga%2522%257D%26module_id%3D99999%26page_id%3D999999&oauth_consumer_key=mixi.jp&oauth_nonce=da4264818a2df02db8fc&oauth_signature=BdnUXpq1YzSaEsu9V6SIAKbFffJW10Gahcl%2FH%2Bk%2Bjqi5fVT0eTEpX1G5vgtvrTDZ5WtG%2BnO13HL8%0AU4eti%2F0W9xQKvmyoofp0e%2B5BlwxQe4pd8ZfLRYHEoSU589qXnec%2F%2BKiiOiI9bLIS4Y80DSNEa%2Bcm%0AmOhU2lcPYexEztUZLeMG0zzUcEsIdxlXv5%2BMBlETwsU7Ii4YAAunBxGY2Q5pZjyvqzkRNNwOa5uI%0AD%2Bq6HSnYvTfIACa%2F70t5YGJRp%2BFdHMljkBH2RWP2RJXYuKoHexlplDokrVlEIrNxZ%2BdhNt1wZZgz%0Ak1P1TM7e%2BEMuHAcOWPmbMVI5p0LyzP5I0%2F60DA%3D%3D&oauth_signature_method=RSA-SHA1&oauth_timestamp=1348048620&oauth_version=1.0&xoauth_signature_publickey=page_touch_20110706
※(注意)GETリクエストです。

(3) アプリへリダイレクト

Cookie有効化スクリプトがcallback_urlへリダイレクト処理を行うと、アプリ起動時と同様にアプリのスタートURLがPOSTで呼び出されます。 アプリ起動時と異なる点は、「(1) mixi.cookie.enable()関数の呼び出し」でappParamsに指定した値が、リクエストボディに含まれて渡ってきます。

例えば、以下のようにappParamsを指定したとします。

mixi.cookie.enable({
     url: "http://example.com/set_cookie.php",
     appParams: {hoge: 'fuga'}
}); 

アプリは署名付きリクエストで以下のように呼び出されます。

POST http://example.com/start_app.php 

※(注意)POSTリクエストです。

またリクエストボディには以下のようなパラメータが含まれます。

項目 渡される値、および例
mixi_page_id mixiページのID
mixi_module_id mixiページ上で複数の同一アプリが配置されていた場合に識別するためのID
mixi_is_owner 閲覧者がmixiページのオーナーであるかどうかを表す真偽値(true/false)
mixi_is_follower 閲覧者がmixiページのフォロワーであるかどうかを表す真偽値 (true/false)
mixi_viewer_id 閲覧者のプラットフォームID ※ 該当のmixiページアプリが、GraphAPIの認証認可でr_profileを取得している時のみ。取得していない場合はパラメータに含まれません。
appParams 上記appParamsで指定したパラメータ

アプリ起動時と同様に、署名の検証を行ってください。
起動時のパラメータとOAuth Signatureの検証についてはこちらのドキュメントをご確認ください。

これでCookieの設定/読み出しが行えるようになりました。

このページの上部へ