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

mixiアプリ

mixiアプリ » 技術仕様(Graph API方式) » スマートフォン » iOS SafariでのCookie有効化について

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

3rd Party Cookie 有効化

下記の3rd Party Cookieの有効化(以下、mixi.cookie.enable)と、Safariの設定変更が必要になります。
Cookieを利用してアプリのセッション管理を行っている場合、iOSのSafariのデフォルトの設定のままですとCookieが有効にならず正常に動作しません。
mixi.cookie.enableをcallすると、Cookieが有効な場合、セッション管理が可能になります。
Cookieが無効の場合は、Cookieを有効にする設定変更(※1)が必要な旨を表示した画面へ遷移します。
※1:設定>Safari>サイト越えトラッキングを防ぐ をOFFにする必要があります。

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()関数を呼び出すことができます。
!document.cookie の条件は、後術のset_cookie.phpにて、httponly属性がfalseであることが前提のコードです。
httponly属性がtrueでCookieをセットする場合は、そのCookieが参照不可能であることを条件に、mixi.cookie.enable をcallしてください。

(function () {
if (!document.cookie) { // Cookieのhttponly属性がfalseであることが前提のコード
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
// 実際には署名付きリクエストの検証を行い、その結果正しいリクエストの場合にのみ以下処理を行う
// Secure属性はtrue、SameSite属性はNoneで指定してください
// PHP7.2以前の場合
setcookie('created_at', time(), time() + 2592000, '/; SameSite=None', '', true, false);
// PHP7.3以降の場合
setcookie('created_at', time(),
[
'expires' => time() + 2592000,
'path' => '/',
'secure' => true,
'domain' => '',
'httponly' => false,
'samesite' => 'None',
]
);

header("Location: " . $_GET['callback_url']);
?>

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

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

署名方式にはRSA-SHA1を利用しています。また公開鍵はこちらに掲載されているものをご使用ください。
実際の検証方法については、署名付きリクエストの検証 に関するドキュメントを参照してください。

GET http://example.com/set_cookie.php?callback_url=http%3A%2F%2Fmixi.jp%2Frun_appli.pl%3Fid%3D31622
%26appParams%3D%257B%2522hoge%2522%253A%2522fuga%2522%257D&oauth_consumer_key=mixi.jp&oauth_nonce=d
d947d8beeba0be07050&oauth_signature=mUP4NpHSvMzi%2Fb6%2FvGROv8Q5rdXlr8dwcS7jmK2iIF%2FIlgChIhNpb0dtH
GCLuy4FT6C%2FCOJDb001%0AiqAyxZuky%2FmbFvy9U%2BsVgzhlYJgWnx5m%2Fv7Exgqdo3bjnbRiEkOR%2BKGJ1WFaOPlMwby
MlMJK%2FGpA%0A7NZ%2FV0K14PZu2tXc3cuZ084apA87NA%2BZSjKslhts8PeNm2UqCMqRUnp0hc0irRk88ICFdiflJbvx%0ArQ
OIP34vkUXEU1K2%2BOZZxmwJA9DwzOolfZHpHwFcE6peozdsFHCK9oDWKMv65j3ku7xtQaKvRhip%0AbrNMJfEHMBYrO6%2B6gI
Iy3IKsl2I6qG%2FjgQee4g%3D%3D&oauth_signature_method=RSA-SHA1&oauth_timestamp=1348044449&oauth_versi
on=1.0&xoauth_signature_publickey=app_touch_20120306

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

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

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

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

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

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

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

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

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

項目渡される値、および例
oauth_consumer_key リクエストが送信されたコンテナを示すキー
例 : mixi.jp
oauth_nonce リクエスト毎に生成されるユニークな値
例 : f32d531cdf60369c16d1
oauth_signature 生成された署名
例 :
Au%2F5K%2BRAFRkgUWHpRBPW53UJqR1x6ngKE%2BKRk4n73pAJXrlIUhZgd
iMmXxFrUzcf5JjfEdyX9E3B%0AXESsvoGnABDPFTMJvE6V1t5Ge%2BB8qGm
Lw8m5wKHu7yCrV1exhVRaiV4ZqdHEX%2BFGeNVP%2BuZtKfxc%0ANHuStGt
c0h8V0muC4B1iARji4Or%2BaJEtuI8gwozUAm2T7F80rEcv3yN7Rwb2%2Bm
PFa5sXW3Ne%2FPp3%0AWZLZsl4O7mRzn0tdKk%2BypVLlgAvcb9xg%2BDDz
ijg1h4zpVPqE22toLSpioJAULOmMjEI2aiGXHcEh%0AQDSV2CWkyFitDLaU
C%2Fb4kUcbuUTlMXyezFzZvw%3D%3D
oauth_signature_method リクエストを署名するために使われたメソッド
例 : RSA-SHA1
oauth_timestamp タイムスタンプ
例 : 1348045323
oauth_version 署名に用いられたOAuathのバージョン
例 : 1.0
opensocial_app_id アプリケーションID
opensocial_owner_id アプリを登録しているユーザのID (※)
opensocial_viewer_id アプリを実行しているユーザのID (※)
xoauth_signature_publickey リクエストを署名するために使われた公開鍵の名前
例 : app_touch_20120306
hoge appParamsで指定されたその他のパラメーター
例 : fuga

※ opensocial_owner_id と opensocial_viewer_id は、ユーザ認可で r_profile を取得している場合にのみ付与されます。ユーザ認可についてはユーザ認可についての項目をご参照ください。
また、Graph API方式のmixiアプリでは、opensocial_owner_id と opensocial_viewer_id は常に同一の値となります。

アプリ起動時と同様に、署名の検証を行ってください。
起動時のパラメータとOAuth Signatureの検証

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

このページの上部へ