如何获取设备令牌?

7

我正在向.NET Web服务发布用户名、密码和设备令牌的值。但是它没有得到任何设备令牌值。我正在使用以下代码。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; 
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeAlert ]; 
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{    
   NSLog(@"didRegisterForRemoteNotificationsWithDeviceToken: %@", deviceToken); 
   NSString *dt = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; 
   dt = [dt stringByReplacingOccurrencesOfString:@" " withString:@""]; 
   self.DeviceToken=dt; 
   NSLog(@"~~~~devToken(dv)=%@",deviceToken);
}

- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{      
    NSLog(@"Failed to get token, error: %@", error);
}

但在控制台中显示:

无法获取令牌,错误原因:Error Domain=NSCocoaErrorDomain Code=3000 "no valid 'aps-environment' entitlement string found for application" UserInfo=0x1a0810 {NSLocalizedDescription=no valid 'aps-environment' entitlement string found for application

有任何想法吗?谢谢!

4个回答

2

你是否在你的临时文件中启用了推送通知?

按照教程查看您是否正确操作。

首先,按照教程中提到的方法,在mac上向设备发送推送通知。您需要在服务器端创建一个pem文件,此文件需要从iOS Portal中创建 :)


嗨,我已经获取了设备令牌,但无法将值发布到Web服务。在控制台中显示-JSONValue失败。错误跟踪为:(“Error Domain = org.brautaset.JSON.ErrorDomain Code = 3 \”Unrecognised leading character\” UserInfo = 0x15e880 {NSLocalizedDescription = Unrecognised leading character})问题出在哪里? - fathik
哇,你救了我的命,这是有史以来最好的教程!我已经为此苦思冥想几个小时了,但在阅读了它之后,仅用5分钟就成功地测试了我的第一个推送通知。谢谢你! - Cesar Bielich

1

我猜你是在设备上运行/调试,因为如果你尝试从模拟器注册推送令牌,会得到不同的错误。只是想把这个问题解决掉。

话虽如此,导致你看到的错误通常是由于你选择的配置文件中未启用推送通知。现在,你可能已经进入了iOS配置门户并为你的App ID启用了推送(还要注意是否为开发或分发配置文件启用了推送)。然而,在这样做之后,你必须进去“污染”你的配置文件,以便配置门户生成一个新的具有推送权限的配置文件。

通过“污染”它,我的意思是进去并更改配置文件的某些设置,以强制重新创建。如果你返回到配置文件列表时,状态在几秒钟内临时更改为“待定”,然后再次变为“活动”,并允许你下载它,那么你就知道你已经足够“污染”它了。

哦,我刚刚发现了这个,它也回答了这个问题(如果我链接错误,请有人帮忙纠正):Bundle Identifier and push certificate... aps-environment entitlement error


0
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{    
   NSLog(@"didRegisterForRemoteNotificationsWithDeviceToken: %@", deviceToken); 
   NSString *dt = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; 
   dt = [dt stringByReplacingOccurrencesOfString:@" " withString:@""]; 
   self.DeviceToken=dt; 

}

0

要获取设备令牌,请在设备上运行应用程序

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Let the device know we want to receive push notifications
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
        (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];

    return YES;
}

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
    NSLog(@"My token is: %@", deviceToken);
}

- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
    NSLog(@"Failed to get token, error: %@", error);
}

我遇到了这个问题...registerForRemoteNotificationTypes:在iOS 8.0及以后版本中不再支持。 - CAN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接