【问题标题】:how to get device token?如何获取设备令牌?
【发布时间】:2012-10-02 13:24:16
【问题描述】:

我将用户名、密码和设备令牌的值发布到 .net 网络服务。但它没有获得任何设备令牌值。我正在使用下面的代码。

- (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);
}

但在控制台显示

获取令牌失败,错误:错误域=NSCocoaErrorDomain Code=3000“找不到应用程序的有效‘aps-environment’授权字符串”UserInfo=0x1a0810 {NSLocalizedDescription=找不到应用程序的有效‘aps-environment’授权字符串

有什么想法吗?提前致谢!

【问题讨论】:

    标签: iphone objective-c ios xcode


    【解决方案1】:

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

    通过the tutorial检查你是否做对了

    首先尝试从您的 Mac 向设备发送推送通知,如教程中所述。您将需要一个服务器端的 pem 文件,您需要从 iOS 门户创建它:)

    【讨论】:

    • 您好,我获得了设备令牌,但未能将值发布到 webservice。在控制台中显示 -JSONValue 失败。错误跟踪是:( "Error Domain=org.brautaset.JSON.ErrorDomain Code=3 \"Unrecognizedleading character\" UserInfo=0x15e880 {NSLocalizedDescription=Unrecognizedleading character} 有什么问题?
    • 天哪,你救了我的命,有史以来最好的教程!在阅读完我刚刚成功测试我的第一个推送通知后,我敲了几个小时和 5 分钟。谢谢大佬!
    【解决方案2】:

    我假设您正在设备上运行/调试,因为您在尝试从模拟器注册推送令牌时会遇到不同的错误。只是想解决这个问题。

    话虽如此,通常会导致您看到的错误是您选择的配置文件中未启用推送通知。现在,您可能已经进入 iOS 配置门户并为您的 App ID 启用了推送(还要注意是否为您的开发或分发配置文件启用了推送)。但是,在这样做之后,您必须进入并“弄脏”供应门户的供应配置文件,以生成一个包含推送权利的新供应配置文件。

    “弄脏”它是指进入并更改配置文件的某些设置以强制重新创建。如果当您返回 Provisioning Profiles 列表时,状态会暂时更改为“Pending”几秒钟,然后再次变为“Active”并允许您下载它,您就会知道您是否“弄脏”了它。

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

    【讨论】:

      【解决方案3】:
      - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
      {    
         NSLog(@"didRegisterForRemoteNotificationsWithDeviceToken: %@", deviceToken); 
         NSString *dt = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; 
         dt = [dt stringByReplacingOccurrencesOfString:@" " withString:@""]; 
         self.DeviceToken=dt; 
      
      }
      

      【讨论】:

        【解决方案4】:

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

        - (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: is not supported in iOS 8.0 and later.
        猜你喜欢
        • 2012-12-15
        • 2014-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多