didRegisterForRemoteNotificationsWithDeviceToken:在调用registerForRemoteNotificationTypes时不调用:?

时间:2011-02-14 16:03:14

标签: iphone push-notification ios-4.2 apple-push-notifications

我正在使用基于navBased的应用中的推送通知。在AppDelegate.m中didRegisterForRemoteNotificationsWithDeviceToken:在调用registerForRemoteNotificationTypes时不调用:代码如下所示:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

    [self.window addSubview:navigationController.view];
    [self.window makeKeyAndVisible];

    return YES;
}



- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    // Get a hex string from the device token with no spaces or < >
    NSLog(@"applicationDidFinishLaunchingWithOptions dev token test");

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

    NSLog(@"Device Token: %@", deviceTokenStr);
}

我很确定配置文件不是问题所在。我发现错误:

注册时出错。错误:错误Domain = NSCocoaErrorDomain Code = 3000“为应用程序找到无效的'aps-environment'权利字符串”UserInfo = 0x115490 {NSLocalizedDescription =找不到有效的'aps-environment'应用程序的权利字符串}

任何人都可以告诉我这个代码中发生了什么,并且它不起作用? thanx

5 个答案:

答案 0 :(得分:7)

在Appdelegate didFinishLaunching方法中输入此代码 -

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
     (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

然后还可以在同一个appdelegate中复制并粘贴这两个方法 -

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
    NSLog(@"My token is: %@", deviceToken);
        NSString *dToken = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
    dToken = [dToken stringByReplacingOccurrencesOfString:@" " withString:@""];


    NSLog(@"STR%@",dToken);


- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{

    NSLog(@"Failed to get token, error: %@", error);
}

答案 1 :(得分:3)

检查一下:link 并确保您已打开5223端口。

答案 2 :(得分:3)

我之前遇到了确切的错误“”“”没有为应用程序“”“”找到有效的“aps-environment”权利字符串。

要解决此问题,您需要一个特定的代码签名配置文件,其中包含适用于APNS的App ID(即:不是。*配置文件)。谷歌周围,你可以找到一些关于如何正确解决它的分步指南。

如果您在日志中看到该错误,请尝试在&gt;设置&gt;常规&gt;配置文件下删除iOS设备上的配置文件,然后在管理器中重新检查它们。

答案 3 :(得分:3)

打开您用于应用的移动设备配置文件,并在那里查找“aps-environment”字符串。它应该设置为“开发”或“生产”。

您收到的错误意味着您在配置文件中没有此字符串,因此不允许应用注册推送通知。如果您在为App ID配置推送通知之前创建了配置文件,则会发生这种情况。

如果您没有在iOS开发者门户网站上看到字符串 - 重新创建(删除/创建新的)mobileprovisioning配置文件。这将解决问题。

另外,请确保在提交到AppStore时,还要为您的应用重新创建配置AppStore配置文件。它必须包含相同的“aps-environment”字符串,如果您在为APP ID配置推送通知之前创建了AppStore配置文件,则默认情况下不存在该字符串。

答案 4 :(得分:0)

生成客户端SSL证书后,请创建一个新的配置文件,其中包含您要用于通知的App ID。