Можно ли вызвать Siri программно в моем приложении с помощью частных API?

Вместо того, чтобы пользователь удерживал кнопку «Домой», я хотел бы программно запустить Siri в своем приложении. Поскольку для этого нет общедоступных API, я хотел бы знать, смог ли кто-нибудь программно запустить Siri через частный API, и если да, то какой частный API вы использовали?

Меня не интересуют какие-либо возвращаемые значения от Siri. Все, что я хочу сделать, это запустить его.


person user2752939    schedule 06.09.2013    source источник
comment
iOS 6 и выше требует прав для запуска приложения даже через частный API. Тем не менее, вы можете запускать приложение программно, если у вас взломанный телефон. Приемлемо ли решение с джейлбрейком?   -  person TorukMakto    schedule 06.09.2013
comment
@Bugivore, Siri на самом деле не является приложением как таковым. Таким образом, он не запускается, как с другими приложениями. Но, если вы видите ниже, я думаю, что у меня есть решение, которое работает (оно работает для меня).   -  person Nate    schedule 07.09.2013
comment
@Nate - отличное предложение. Согласитесь, что он использует только частный API, поэтому телефон с джейлбрейком не нужен.   -  person TorukMakto    schedule 08.09.2013
comment
Я не собираюсь отправлять это приложение в Apple AppStore, но я бы предпочел не делать джейлбрейк iPhone.   -  person user2752939    schedule 11.09.2013


Ответы (2)


Ответ немного зависит от того, предназначено ли это приложение, которое просто не появится в App Store (корпоративное приложение или личное/хобби-приложение), или же оно действительно будет работать на взломанных телефонах. .

Если вы можете положиться на взломанный телефон и утилиты для джейлбрейка, такие как MobileSubstrate, то я считаю, что вы можете реализовать метод для открытия Siri точно так же, как libActivator Райана Петрича делает, как я показываю в этом другом ответе .

Однако, если вы создаете для обычных заключенных телефонов, я все еще думаю, что вы можете «взломать» его (с помощью частных API), имитируя способ, которым пользователь открывает Siri. Сначала нажмите кнопку «Домой», немного удерживайте ее, затем отпустите.

Этот код работает для меня (iOS 6.1):

#import "GSEvent.h"

а также

- (void)launchSiri {
   [self simulateTouchEvent: kGSEventMenuButtonDown];

   double delayInSeconds = 1.0;
   dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
   dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
      [self simulateTouchEvent: kGSEventMenuButtonUp];
   });
}

- (void)simulateTouchEvent: (GSEventType)type
{
   struct GSEventRecord record;
   memset(&record, 0, sizeof(record));
   record.type = type;
   record.timestamp = GSCurrentEventTimestamp();
   GSSendSystemEvent(&record);  
}

Это зависит от наличия заголовка GSEvent.h, который не является частью общедоступного набора заголовков. Кажется, я получил свой здесь, а также GSWindow. h, который он втягивает. Очевидно, вам нужно будет загрузить эти два заголовка и добавить их в свой проект.

Этот код находится в частной структуре GraphicsServices, поэтому вам также потребуется добавить эту структуру в свой проект. Сделайте это так же, как добавление обычного фреймворка, но вам нужно перейти куда-нибудь, например

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/PrivateFrameworks/GraphicsServices.framework

чтобы найти его (путь скорректирован для вашего каталога установки Xcode и SDK).

Отказ от ответственности: я проверял это на взломанном телефоне, но это определенно было внутри обычного приложения, установленного в /var/mobile/Applications/ песочнице, и я на 99% уверен, что не сделал ничего, что зависит от того, взломан.

person Nate    schedule 07.09.2013

Неа. Нет доступа к Siri. Я почти уверен, что если вы каким-то образом получите доступ, Apple отклонит ваше приложение. (но я могу придумать еще многих, кто будет признателен)

Однако есть следующее: http://ps3trophies.com/forums/apple/6458-siri-cracked-now-even-android-users-can-use-siri.html

См. также этот ответ: https://stackoverflow.com/a/12607905/2535467

person CaptJak    schedule 06.09.2013