可以使用私有API在我的应用程序中以编程方式调用Siri吗?

时间:2013-09-06 03:53:21

标签: ios iphone-privateapi siri

我希望以编程方式在我的应用程序中启动Siri,而不是让用户按住主页按钮。由于没有可用于实现此目的的公共API,我想知道,如果有人能够通过私有API以编程方式启动Siri,那么您使用了哪些私有API?

我对Siri的任何回报值不感兴趣。我想做的就是发布它。

2 个答案:

答案 0 :(得分:13)

答案取决于是否适用于不会进入App Store(企业应用程序或个人/爱好应用程序)的应用程序,或者它是否实际上将在越狱上运行手机。

如果您可以依赖越狱手机和越狱实用程序(如MobileSubstrate),那么我相信您可以像Ryan Petrich's libActivator does一样实施一种方法来打开Siri,就像show in this other answer一样。

但是,如果您正在构建普通的 jailed 手机,我仍然认为您可以通过模拟用户打开Siri的方式来“破解”它(使用私有API)。首先,按Home键,按住一下,然后松开。

此代码适用于我(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标头,该标头不是公共标头集的一部分。我相信我得到了我here, as well as GSWindow.h that it pulls in。显然,您需要下载这两个标题并将它们添加到您的项目中。

此代码位于 GraphicsServices 私有框架中,因此您还需要将该框架添加到项目中。这样做就像添加普通框架一样,但你需要浏览到像

这样的地方
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/PrivateFrameworks/GraphicsServices.framework

找到它(为Xcode安装目录和SDK调整路径)。

免责声明:我在越狱手机上进行了测试,但它确实在一个普通的应用程序中,安装在/var/mobile/Applications/沙箱区域,我99%肯定我没有'做了任何依赖于越狱的事情。

答案 1 :(得分:1)

不。无法访问Siri。我很确定如果您确实可以访问,Apple会拒绝您的应用程序。 (但我可以想到更多会受到赞赏的人)

虽然如此:http://ps3trophies.com/forums/apple/6458-siri-cracked-now-even-android-users-can-use-siri.html

也请参阅此答案:https://stackoverflow.com/a/12607905/2535467