Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
找到用户在iOS显示的UIAlertView上选择的按钮的方法,请求允许应用接收推送通知的权限_Ios_Iphone_Apple Push Notifications_Uialertview - Fatal编程技术网

找到用户在iOS显示的UIAlertView上选择的按钮的方法,请求允许应用接收推送通知的权限

找到用户在iOS显示的UIAlertView上选择的按钮的方法,请求允许应用接收推送通知的权限,ios,iphone,apple-push-notifications,uialertview,Ios,Iphone,Apple Push Notifications,Uialertview,是否有一种方法可以与iOS显示的警报交互。例如:如果我的应用程序已经注册了APNS,在第一次启动时,iOS会显示一个UIAlertView(我假设它是一个),给用户两个选择。是否有方法找出用户选择的按钮? 在我的应用程序启动期间,我会显示两个警报,一个用于APN,另一个用于位置服务。是否有方法确定哪个警报用于什么?否。无法获取操作系统创建的AlertView的回调。就像CoolMonster在他的评论中指出的那样,你可以找到用户为特定的AlertView选择了什么,并据此做一些事情。我不知道推送

是否有一种方法可以与iOS显示的警报交互。例如:如果我的应用程序已经注册了APNS,在第一次启动时,iOS会显示一个UIAlertView(我假设它是一个),给用户两个选择。是否有方法找出用户选择的按钮?
在我的应用程序启动期间,我会显示两个警报,一个用于APN,另一个用于位置服务。是否有方法确定哪个警报用于什么?

否。无法获取操作系统创建的AlertView的回调。就像CoolMonster在他的评论中指出的那样,你可以找到用户为特定的AlertView选择了什么,并据此做一些事情。

我不知道推送通知,但这里有一种(丑陋的)方法可以在请求获得用户位置的权限时检测用户的选择:

// After asking for permission, the alert is shown to the user. Since he can't do anything
// at this point but select one of the two options we simply wait...
while(([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined))
{
     sleep(1);
}
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized)
{
    NSLog(@"User allowed access to gps");
}
else
{
    NSLog(@"User denied access to gps");
}

您可以获得如下通知类型:

UIRemoteNotificationType notificationTypes=[[UIApplication sharedApplication]enabledRemoteNotificationTypes]


如果你不能直接访问这些警报,我建议你从另一个角度来看待这个问题

例如,对于CoreLocation,您可以查看其
[CLLocationManager授权状态]

   kCLAuthorizationStatusNotDetermined = 0, // User wasn't proposed to use location services
   kCLAuthorizationStatusRestricted, // Parental control or something like that
   kCLAuthorizationStatusDenied,    // User didn't allow this application to use services
   kCLAuthorizationStatusAuthorized // User allowed to use his location.
对于APN,有
[[UIApplication sharedApplication]启用远程通知类型]

资料来源:


虽然可能没有一种明确的方法来知道用户单击了什么按钮,但通过实现以下UIApplication delegate方法,您肯定可以确定用户是否授权使用推送通知:

(用户接受)


(用户拒绝或无法接受)

这可能会对您有所帮助,但并非如您预期的那样。谢谢@CoolMonster。我确实看到了。我已经在这样做了。我正在尝试是否有办法处理按钮单击,就像我们为UIAlertView创建的那样。谢谢,@ElJay。我已经尝试了@CoolMonster提到的方法。谢谢,@Gad Markovits。我会试试这个。谢谢@nerowolfe。我确实尝试过这个方法。我还尝试过在“ApplicationWillResignative:”中枚举self.window的子视图,但我无法将UIAlertView视为子视图。我想你无法捕捉到这个UIAlertView,所以,如果用户不允许对你的应用程序进行远程通知,你只能在以后才知道。是的,我也在考虑同样的问题,@nerowolfe。这似乎是不可能的。这篇文章有一种方法可以满足我的要求。从我看到的(_属性__((可见性(“隐藏”)),它似乎是一个私有类,因此无法在提交到应用商店的应用中使用。感谢您的建议。我最终使用了“enabledRemoteNotificationTypes:”。正如尤里·罗曼琴科所建议的那样。