向现有应用添加推送通知 - 无法使其正常工作

时间:2013-08-13 17:37:13

标签: apple-push-notifications

我已经在appstore中有一个应用程序。现在我想添加APNS。在开发人员门户网站上,我设置了开发人员证书,并为APNS启用了我的应用。我创建了一个新的配置 配置文件并在我的应用程序中设置它在调试。我已删除所有其他配置文件。

当我在iphone上运行我的应用程序时,我发送registerForRemoteNotificationTypes但从不 从apple获得响应,也没有调用错误委托。如果我删除该应用程序 在iPhone和重新安装,它从不询问推送通知。

我已经阅读了过去2天内关于该主题的尽可能多的堆栈溢出文章和教程/ Apple文档,因为到目前为止似乎没有解决我的问题。

我检查过的其他事情:
- 检查Entitlements.plist文件中的坏键
- 检查下载的.mobileprovision文件,查找带有开发字符串
的aps-environment - 删除了管理器中的所有其他配置文件 - >设备以及钥匙扣
- 将我的iphone上的日期更改为前一天,关闭电源,打开电源,重新加载应用

有没有人对尝试尝试或尝试的答案有任何其他建议 在现有应用程序上设置APNS似乎不起作用?

请注意,我试图用APNS开发一个新版本,而不是问为什么发布 版本还没有工作。一旦我可以使用APNS进行调试,那么我会选择disto APNS。 提前谢谢。

[编辑]我想你误解了我的问题。我已经阅读了文档和 经历了这些步骤。事实上,这个相同的代码同时工作,我禁用它 暂时几个转发前,但现在想重新启用它。我也见过 相同的教程。据我所知,主要问题不是我的代码,而是规定 个人资料或与Apple的错误及其处理推送证书的方式有关 在现有文件或其他东西。

这是我的代码,但正如我所说,我不认为我的代码在这一点,它的东西 供应或某事。香港专业教育学院证实我称之为,但永远不会回电 在IOS Dev网站上获得推送证书设置之后的其中一个代表 通过推送获得新的配置文件。

[application registerForRemoteNotificationTypes:
     (UIRemoteNotificationType)
     (UIRemoteNotificationTypeBadge |
      UIRemoteNotificationTypeSound |
      UIRemoteNotificationTypeAlert) ];

代表永远不会被召唤:


- (void) application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    [Log log:TINFO :@"==== APNS didRegisterForRemoteNotifcationsWithDeviceToken ===="];

    NSString *devtok = [NSString stringWithFormat:@"%@",deviceToken];
    devtok = [devtok stringByReplacingOccurrencesOfString: @"" withString: @""];
    devtok = [devtok stringByReplacingOccurrencesOfString: @" " withString: @""];

    NSString *stok = [[[NSString alloc] initWithFormat:@"%@", devtok] autorelease];

    [Log log:TINFO :@"saving ", devtok];

    UpdateDevToken *utok = [[UpdateDevToken alloc] autorelease];
    [utok updateDeviceToken:stok];

}

错误代表:

- (void)application:(UIApplication *)application    didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
    [Log log:TERR :@"==== APNS didFailToRegisterForRemoteNotificationsWithError: %@", error.localizedDescription];
}

[编辑2]忘了添加我也有didReceiveRemoteNotification:

- (void)application:(UIApplication *)application didReceiveRemoteNotification(NSDictionary *)userInfo
{
[Log log:TENT :@"==== APNS didReceiveRemoteNotification"];
}

我的代表都没有接到电话。

1 个答案:

答案 0 :(得分:0)

See Apple doc on APNS.

开始

查看Raywander Tutorial.

然后修改我们的AppDelegate类。

      // Add This to did to 
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        ........
      [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
       return YES;
    }

    - (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
        {
            NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

            if ([defaults valueForKey:@"device_token"]) { // Check existing device token
                NSLog(@"My saved token is: %@", [defaults valueForKey:@"device_token"]);
            }

            NSString *deviceTokenString = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
            deviceTokenString = [deviceTokenString stringByReplacingOccurrencesOfString:@" " withString:@""];

            [defaults setObject:deviceTokenString forKey:@"device_token"];
            [defaults synchronize];

            NSLog(@"My token is: %@", deviceTokenString);
        }

        - (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
        {
            NSLog(@"Failed to get token, error: %@", error);
            //[self showAlertMessage:@"Failed to get token, error!"];

        }
        - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
        {
            NSLog(@"userInfo :%@",userInfo);
            //[self setUser:[[userInfo valueForKey:@"aps"] valueForKey:@"alert"]];
        }