残念ながら、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>