残念ながら、Safary はサード パーティの Cookie をブロックしており、これは Facebook アプリの開発者にとって大きな問題です。サファリの新しいアップデートがあっても確実に機能する唯一の解決策は、上で説明したものです。
あなたのアプリがどのように設計されているかはわかりませんが、私が行っているすべてのアプリには、ユーザーがページに入るボタンのあるランディング ページがあります。
このボタンには 2 つの主な目的があります。最初の目的は、ユーザーがまだ許可していない場合に許可を要求することであり、もう 1 つは、アプリが配置されている URL で新しいウィンドウを開くことです。ユーザーは iframe 外のドメインにアクセスしているため、セッションを作成できます。基本的に、この新しいウィンドウが私の URL にアクセスするとセッションが作成され、自動的に閉じます。
これについては、上記の質問で詳しく読むことができます。ほとんどの回答は時代遅れですが、何が機能し、何が機能しないかがわかります
Safari サードパーティ Cookie iframe トリックが機能しなくなりましたか?
編集
私がやったことは、ユーザーがボタンを押した後、アプリが次のページに移動し、JavaScript (ポップアップなど) で新しいウィンドウを開くことです。
したがって、ランディング ページでは、リスナーをボタンに配置するだけです (jquery を使用していることに注意してください)。
$(document).on("click", ".bt-landing", function(){
window.open('<?=site_url("app/create_session")?>', '_blank', 'toolbar=0,location=0,menubar=0');
});
これは、コントローラ メソッド「create_session」のコードです。
public function create_session(){
setcookie("safari_test", "1");
$this->load->view('create_session');
}
読み込まれるビューは次のとおりです。
<html>
<head>
<meta charset="utf-8">
<title>App title</title>
<script type="text/javascript" src="<?=base_url('public/js/jquery-1.9.1.min.js')?>"></script>
</head>
<body>
<script type="text/javascript">
$(document).ready(function(){
setTimeout(function(){window.close()},1000);
})
</script>
</body>
</html>