Webサイトに設置したTwitter投稿用リンクをデバイスごとに切り替える

PHP

Webサイトにツイッター投稿用のリンクを設置しました

ところが、調べてみるとツイッターの投稿リンクはいくつか種類があり、デバイスで対応してる場合としてない場合があります

またスマホの場合、アプリがインストールされていた場合はアプリを起動し、未インストールだったらブラウザを起動するといったことも必要になります

それらを踏まえて、デバイスごとに切り替える実装をしました

やりたいこと

Webサイトに設置したこんな感じのリンクをクリック・・・

するとツイッターアプリが起動して投稿フォームが開く!

というのをAndroidやIOSでも同じ挙動にしたいわけです

リンクからツイッター投稿するリンク表記は3種類

<a href="">ツイッターへ投稿する</a>

先ほどのリンクはHTMLにすればこんな感じのaタグになります

実際に指定のテキストをツイートさせるにはhref属性にリンクを設定します

が、困ったことにツイートする用のリンクは3種類あります

  • twitter://post?message=投稿テキスト!
  • intent://post?message=投稿テキスト!#Intent;scheme=twitter;package=com.twitter.android;end
  • https://twitter.com/intent/tweet?text=投稿テキスト!

どれもツイートするという同じ目的にリンクなのですが、デバイスごとに微妙に挙動が異なります

PCAndroidiOS
twitter://post?message=×
intent://post?message=×
https://twitter.com/intent/tweet?text=○(※1)△(※2)

(※1 Chrome,Safari,Firefoxで確認)

(※2 アプリではなくブラウザで起動してしまう)

結果的に言えば、一つのやり方で全てのデバイスをカバーするのは無理なので、デバイスごとにリンクを切り替える必要があります

やり方はいくつかありますが、僕はこんな感じで実装することにしました

PCAndroidiOS
twitter://post?message=×
intent://post?message=×
https://twitter.com/intent/tweet?text=○(※1)△(※2)

Androidの時だけ「twitter://post?message」を使い、それ以外の時は「https://twitter.com/intent/tweet?text=」を使うというものです

(今回はAndroidにはなんとなく汎用的なtwitter://を使うことにしましたが、もしかしたら2番目のURLスキーム(intent://)の方がAndroidの形式に特化しているのでベストかもしれません。ツイッターアプリがインストールされてる状態ではtwitter://でも問題ありませんでしたが、未インストールの状態では違いが出るかも)

実装

public function isAndroid()
{
    $ua = $_SERVER['HTTP_USER_AGENT'];
 
    if ( preg_match('/Android/ui', $ua) ) {
        return true;
    } else {
        return false;
    }
}
 
$shereUrl = "";
 
if(isAndroid()){
    $shereUrl = "twitter://post?message=" . urlencode('投稿テキスト!');
}
else{
    $shereUrl = "https://twitter.com/intent/tweet?text=" . urlencode('投稿テキスト!');
}
<a href="<?php echo $shereUrl; ?>">ツイッターへ投稿する</a>