3

我正在尝试确定用户是否使用 phonegap(1.7 版)为我的应用启用了推送通知。

到目前为止,我只提出了这个插件,它没有专门检查该问题的方法,但确实有注册推送通知的方法,这可能会返回错误,这可能是用户禁用推送通知的指示。但正如你所看到的,这是非常模糊的。

所以我的问题是 - 是否有插件(或任何其他方式)来确定用户是否为我的应用启用了推送通知?

4

1 回答 1

4

您可以使用以下方法检查是否启用了任何类型的推送通知:

if([UIApplication sharedApplication].enabledRemoteNotificationTypes == UIRemoteNotificationTypeNone)

在设备准备就绪后,可以通过调用一个简单的插件来访问此状态。

更新:编写一个插件,在该插件内请检查状态并返回到 javascript

如果您首先需要将其保存在服务器上,则需要一个服务器端api和一些本机端代码,在ios上注册推送通知后有两个回调函数

  1. didFailToRegisterForRemoteNotificationsWithError
  2. didRegisterForRemoteNotificationsWithDeviceToken

    因此,如果成功,您可以使用设备 ID 或任何唯一 ID 向您的服务器发送请求,以便保存已注册的设备。

    • (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken {

      NSString *token = [[[[deviceToken description] stringByReplacingOccurrencesOfString:@"< "withString:@""] stringByReplacingOccurrencesOfString:@">" withString:@""] stringByReplacingOccurrencesOfString:@" " withString:@""];

      [自我 postUpdateRequest:token]; // 请求你的服务器

      }

用于发送 POST 请求使用

 NSURL *aUrl = [NSURL URLWithString:uRI];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:aUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];

    [request setHTTPMethod:@"POST"];
   NSString *postString =@"Your Data";
     [request setHTTPBody:[postString dataUsingEncoding:NSUTF8StringEncoding]];

   NSURLConnection *connection= [[NSURLConnection alloc] initWithRequest:request
                                                               delegate:self];
  [connection start];
        if(connection) {
       // success
        } else {
       //error
        }

如果注册失败(didFailToRegisterForRemoteNotificationsWithError),您可以向服务器发送带有错误数据的请求集或不。

在设备准备好后从 phonegap 端向您的服务器发送一个 ajax 请求并检查您的设备是否已注册。要获得唯一 ID,您可以使用简单的插件。要编写简单的插件,请遵循此 http://docs.phonegap.com/en/edge/guide_hybrid_plugins_index.md.html#Plugin%20Development%20Guide

遗憾的是,您无法通过应用代码为您的应用启用或禁用推送通知。 检查这个

于 2013-08-28T04:43:39.040 回答