Можно ли программно использовать Siri в моем приложении, используя частные API?

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

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

Ответы

Ответ 1

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

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

Однако, если вы строите для обычных, заключенных в тюрьму телефонов, я все же думаю, что вы можете "взломать" его (с помощью Private 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% уверен, что не сделал ничего, что зависит на том, что он был взломан.

Ответ 2

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

Есть это, хотя: http://ps3trophies.com/forums/apple/6458-siri-cracked-now-even-android-users-can-use-siri.html

См. также этот ответ: fooobar.com/info/329587/...