2016-10-16 2 views
12

Я хочу иметь социальные значки в scrollView, который при нажатии, работает так же, как если бы я нажал на них после представления UIActivityViewController. Я не хочу представлять UIActivityViewController.Открытая активность без отображения UIActivityViewController

Я знаю, что это не должно быть возможно, но приложение под названием Yodel делает это (или что-то подобное), и я хочу сделать то же самое.

Нажатие на иконку в Yodel работает точно так же, как это было бы в UIActivityViewController, так что кажется, что они каким-то образом поместить его в вид контейнера (?)

Here's a GIF showing it

enter image description here

Использование Whatsapp в качестве примера Я пробовал следующее:

  1. Использование WhatsApp API https://www.whatsapp.com/faq/en/iphone/23559013 со схемой URL

    var whatsappURL = NSURL(string: "whatsapp://send?text=Hello%2C%20World!")! 
        if UIApplication.sharedApplication().canOpenURL(whatsappURL) { 
         UIApplication.sharedApplication().openURL(whatsappURL) 
        } 
    
  2. Использование UIActivityViewController, но я хочу, чтобы они все быть в Scrollview, как показано на рисунке выше.

  3. Использование UIWebView для открытия схемы URL в надежде, что она останется внутри UIWebView.

    var whatsappURL = NSURL(string: "whatsapp://send?text=Hello%2C%20World!")! 
    if UIApplication.sharedApplication().canOpenURL(whatsappURL) { 
        UIApplication.sharedApplication().openURL(whatsappURL) 
    } 
    
    self.view.addSubview(webview) 
    webview.loadRequest(NSURLRequest(URL: NSURL(string: "whatsapp://send?text=Hello%2C%20World!")!)) 
    

Все эти решения открывает другое приложение - я хочу, чтобы по-прежнему оставаться в моем приложении.

Любая идея, как это сделать? Помощь будет принята с благодарностью :)

+0

Невозможно. Но вместо этого вы можете реализовать расширение общего доступа. Тогда вы можете позволить пользователю делать вещи там, не выходя из своего приложения. – aross

+0

Не распространяются расширения только для UIActivityViewController? Я не хочу представлять UIActivityViewController. –

ответ

0

Short: Это невозможно.

Каждое приложение запускается внутри собственной «игровой площадки», и приложения полностью фокусируются на устройстве.

Я предполагаю, что Пользователь воссоздал интерфейс этих приложений и получил информацию из API. Например, мы получаем контент, из API Whatsapp и воссоздаем пользовательский интерфейс, чтобы он чувствовал, что мы внутри Whatsapp. Но вы не должны этого делать, поскольку вы можете столкнуться с нарушениями авторских прав.

Но в целом приложения не знают друг о друге.

И единственная возможность запуска стороннего приложения, как вы уже знаете, это URL-схема. Если вы хотите запустить приложение в своем приложении, как в UIWebView, вам нужно будет подражать целому iOS. Так невозможно.

Однако может быть с jailbroken iPhones, но я понятия не имею об этом.

+0

Большое спасибо за ответ! Однако, если вы загрузите Yodel и посмотрите на Snapchat, например, все будет точно таким же - даже анимации с уменьшением. Я не думаю, что он сделал все это, более разумно, что он каким-то образом настроил UIActivityViewController в UIScrollView. Знаете ли вы, возможно ли это? –

+0

в порядке. но для snapchat: не забывайте, что все приложения принадлежат одной и той же компании. –

+0

instagram, whatsapp, facebook.до сих пор они могут открывать двери друг другу, которые никто не может использовать –

0

Yodel: они создали свой собственный пользовательский вид, и они выбрали некоторые распространенные приложения, такие как whatsapp, snapchat, messenger и т. Д., Для которых openurl common, они проверили каждый из них, используя «canOpenUrl», чтобы проверить, доступно ли данное приложение на мобильном телефоне пользователя. Если доступно, нажмите значок. Когда пользователь нажимает на него, он откроет данное приложение, используя «openUrl».

Здесь, в yodel, вы можете видеть, что он не может принимать все доступные приложения для совместного использования, он может только предопределять исправленные приложения, которые они определили. В других приложениях они добавили «больше кнопок» в конце, которые при нажатии откроют UIActivityViewController.

+0

Это не то, как это делает Йодел, это решение, которое у меня есть. Однако я не хочу открывать другое приложение; Я хочу остаться в своем приложении. –

+0

Yodel также открывает другие приложения ... Проверьте, что –

+0

Нет, если вы посмотрите на .gif, который я разместил, это не так. Туры в Йодел. –

4

На самом деле я сделал то же самое, но для этого решения вам необходимо также реализовать боковой сервер для продолжения поддержки новых приложений, которые появляются в AppStore (без обновления вашего приложения для каждого раза, когда вам нужно/нужно добавить/удалить новое приложение в/из списка)

первый: вы должны решить, что вы собираетесь делиться на другие приложения

второй: вам необходимо выяснить схему URL, что приложения работают с,

примером для Instagram -> "Instagram: // пользователь имя пользователя = your_username"

третий: теперь логика процесса

скажем я хочу показать facebook, Twitter, провисание и Instagram,

Зададим словарь с соответствующим адресам:

["facebook":"facebook://blablabla", "twitter":"twitter://blabla", "slack":"slack://blabla", "instagram":"instagram://blabla"] 

ТАКЖЕ НЕОБХОДИМО ПРОВЕСТИ Пиктограммы приложения (локально или сервер/firebase/облако) - для отображения позже на вашем Scrollview (ч orizontaly CollectionView или то, что вы решили использовать)

4-я: вам нужно проверить, что приложения установлены на устройстве:

Так просто петля на ваши приложения массива/словарь (или то, что когда-либо вы принять решение о проведении вашей информации и проверить наличие свободных мест, как, что:

let instagramHooks = "instagram://user?username=your_username" 
let instagramUrl = URL(string: instagramHooks) 
if UIApplication.shared.canOpenURL(instagramUrl! as URL) 
{ 
//The app are installed you can show her 
} else { 
     //The app doesn't installed -> don't show it on the list 
    } 

После этого вам просто нужно положить их значки UICollectionView/UIScrollView и когда пользователь нажмите на иконку вы идете и открыть эту схему:

UIApplication.shared.open(instagramUrl!) 

О том, как целевое приложение покажет диалоговое окно (например, действия UIActivityViewController или на самом деле открыть приложение я не сейчас), но я уверен, что вы можете найти здесь кто-то, что поможет вам в этом

Хоп вы понимаете мои шаги, если нет, вы можете связаться со мной для получения более подробного объяснения.

Смежные вопросы