zoonman
@zoonman
CEO @ LinuxQuestions.ru

Как сделать ссылку на Viber?

Собственно, у Viber есть свой мета-протокол, а ля
<a href="viber://..."
Никак не могу найти детали, хочу просто сделать, чтобы открывалось приложение Вибера и контакт добавлялся в список или открывалось сообщение для указанного номера.
  • Вопрос задан
  • 147189 просмотров
Пригласить эксперта
Ответы на вопрос 8
@parfenov_sk
На дворе 2017, если кому нужно еще —
Открыть чат:
<a href="viber://chat?number=ххххххххх">Viber</a>
Добавить контакт:
<a href="viber://add?number=ххххххххх">Viber</a>
Номер без плюса.
Ответ написан
Middle_Pudge
@Middle_Pudge
Дело в том что десктопное и мобильное приложение Viber открывается по разным ссылкам, что создает определенные сложности при добавлении такой ссылки на сайт. Поэтому потратьте 2 минуты чтобы прочитать и понять текст ниже) Для мобильных устройств используется такой подход формирования ссылки:
<a href="viber://add?number=380950000000">Написать в Viber</a>

Для ПК – такой:
<a title="Должен быть установлен Viber для ПК" href="viber://chat?number=+380950000000">Написать в Viber</a>


Для того, чтобы определить устройство при помощи PHP, в самом простейшем случае можно воспользоваться простейшей функцией, которая определяет USER_AGENT устройства, а затем, в зависимости от того, опередила ли функция устройство как мобильное или нет, показывать ту или иную ссылку.
<?php function check_mobile_device() { 
    $mobile_agent_array = array('ipad', 'iphone', 'android', 'pocket', 'palm', 'windows ce', 'windowsce', 'cellphone', 'opera mobi', 'ipod', 'small', 'sharp', 'sonyericsson', 'symbian', 'opera mini', 'nokia', 'htc_', 'samsung', 'motorola', 'smartphone', 'blackberry', 'playstation portable', 'tablet browser');
    $agent = strtolower($_SERVER['HTTP_USER_AGENT']);    
    foreach ($mobile_agent_array as $value) {    
        if (strpos($agent, $value) !== false) return true;   
    };     
    return false; 
};?>

Расположить функцию, можно, например в самом начале страницы, перед 'doctype' или вынести в отдельный файл и там же подключить его.

После этого, в месте где будет выводиться ссылка на Viber используйте такую проверку:
<? if(check_mobile_device()) :?>
	<a title="Viber" href="viber://add?number=79851198793"></a>              
<? else : ?>
	<a title="Viber" href="viber://chat?number=+79851198793"></a>
<? endif; ?>

Теперь, если человек зашел с ПК, то ему покажется ссылка для десктопного приложения, а если с мобильного устройства, то ссылка для смартфона или планшета.
Ответ написан
Для андроида вроде есть viber://tel:xxxxxx и viber://chat:xxxxxx
Но я не проверял.

Для iOS есть только viber://calls (открывает таб звонков) и viber://chats (открывает таб чатов)

Еще есть viber://forward?text=Hello (на iOS открывает экран выбора адресата, на Андроиде не проверял) - отсюда.
Ответ написан
kellas
@kellas
веб-разработчик
<a href="viber://add?number=79119998877"> вайбер </a>
Ответ написан
Flanker_4
@Flanker_4
Это называется Url scheme. Я уверен на 99% что Viber сделал лишь задел на будущее, и на данный момент этот протокол только и умеет что открывать приложение (а умеет ли вообще, Вы проверяли?)

Насчет добавления контакта, очень сомневаюсь... безопасность все такое, но Вы всегда можете обратиться на support.viber.com, там подскажут

Еще можно воспользоваться вот такой штучкой . Если приложение будет установлено, оно кинет в него, а не в апп стор. Само собой тут речь только о открытии приложения, а не о добавлении контакта.
Ответ написан
@DimanGr
Второй раз за день убеждаюсь, что лучше телеги пока нечего нет.
Ответ написан
@staskmp
на айфонах и винде не работает формат телефона "380", нужен обязательно "+380" либо 068(067 и тд)
на андроидах не работает формат с "+380" и 068(067 и тд), нужен только "380"

я через HTTP_USER_AGENT отслеживаю устройство

и с помощью регулярного выражения меняю формат

например отследить можно так
<?php
 
$mobile_browser = '0';
 
if (preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|android)/i', strtolower($_SERVER['HTTP_USER_AGENT']))) {
    $mobile_browser++;
}
 
if ((strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml') > 0) or ((isset($_SERVER['HTTP_X_WAP_PROFILE']) or isset($_SERVER['HTTP_PROFILE'])))) {
    $mobile_browser++;
}    
 
$mobile_ua = strtolower(substr($_SERVER['HTTP_USER_AGENT'], 0, 4));
$mobile_agents = array(
    'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac',
    'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno',
    'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-',
    'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-',
    'newt','noki','oper','palm','pana','pant','phil','play','port','prox',
    'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar',
    'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-',
    'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp',
    'wapr','webc','winw','winw','xda ','xda-');
 
if (in_array($mobile_ua,$mobile_agents)) {
    $mobile_browser++;
}
    
if (strpos(strtolower($_SERVER['ALL_HTTP']),'OperaMini') > 0) {
    $mobile_browser++;
}
    
if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'windows') > 0) {
    $mobile_browser = 0;
}
 
if(strstr($_SERVER['HTTP_USER_AGENT'],'iPhone') || strstr($_SERVER['HTTP_USER_AGENT'],'iPod'))
 {
  $mobile_browser = -1;
}
   
?>


или так

<?php
 
$mobile_browser = '0';
 
if (preg_match('/(android)/i', strtolower($_SERVER['HTTP_USER_AGENT']))) {
    $mobile_browser++;
}
    
if (strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'windows') > 0) {
    $mobile_browser = 0;
}
 
if(strstr($_SERVER['HTTP_USER_AGENT'],'iPhone') || strstr($_SERVER['HTTP_USER_AGENT'],'iPod'))
 {
  $mobile_browser--;
}
   
?>


а маску можно сделать так
<?php if ($mobile_browser > 0) { 
			if (substr(preg_replace('/[^0-9]/', '', $row->mobil_phone), 0, 2) != '38') { ?>
				<a href="viber://chat?number=<?php echo preg_replace('/[^0-9]/', '', substr_replace($row->mobil_phone, '38', 0, 0))?>"><?php echo preg_replace('/[^0-9+]/', '', $row->mobil_phone)?></a>
			<?php }	else { ?>
				<a href="viber://chat?number=<?php echo preg_replace('/[^0-9]/', '', $row->mobil_phone)?>"><?php echo preg_replace('/[^0-9+]/', '', $row->mobil_phone)?></a>
			<?php }?>
	<?php } else if ($mobile_browser < 0 || $mobile_browser == 0){ 
			if (substr(preg_replace('/[^0-9]/', '', $row->mobil_phone), 0, 2) != '38') { ?>
				<a href="viber://chat?number=<?php echo substr_replace(preg_replace('/[^0-9]/', '', $row->mobil_phone), '+38', 0, 0)?>"><?php echo substr_replace(preg_replace('/[^0-9]/', '', $row->mobil_phone), '+38', 0, 0)?></a>
			<?php }	else { ?>
				<a href="viber://chat?number=<?php echo substr_replace(preg_replace('/[^0-9]/', '', $row->mobil_phone), '+', 0, 0)?>"><?php echo substr_replace(preg_replace('/[^0-9]/', '', $row->mobil_phone), '+', 0, 0)?></a>
			<?php }?> 
	<?php }	?>


код кривой, но рабочий, если оптимизируете буду благодарен
Ответ написан
@d_shmn
Веб-разработчик
Нужно просто добавить проверку, с какого устройства заходит пользователь. Для меня сработало следующее:

<?php
function isMobile() { 
return preg_match("/(android|avantgo|blackberry|bolt|boost|cricket|docomo|fone|hiptop|mini|mobi|palm|phone|pie|tablet|up\.browser|up\.link|webos|wos)/i", $_SERVER["HTTP_USER_AGENT"]);
}
   if(isMobile()){?>
   <a href="viber://add?number=xxxxxxxxxxx">Viber</a>
   <?php
   }else{?>
      <a href="viber://chat?xxxxxxxxxxx">Viber</a>
<?php } ?>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы