【问题标题】:How to use PushMeBaby sample to send Apple Push Notifications?如何使用 PushMeBaby 示例发送 Apple 推送通知?
【发布时间】:2011-01-11 13:39:50
【问题描述】:

我正在尝试使用 PushMeBaby 示例 APN 服务器应用程序向我的设备发送推送通知。我有临时分发应用程序。对于我的应用程序 ID,我创建了用于开发和生产的 ssl 证书。似乎没有从 PushMeBaby 应用程序发送推送通知,我已经将 Push SSL 证书安装到工具链.. 似乎仍然无法正常工作..

2010-02-01 07:20:49.578 PushMeBaby[7193:a0f] MakeServerConnection(): 0
2010-02-01 07:20:49.613 PushMeBaby[7193:a0f] SSLNewContext(): 0
2010-02-01 07:20:49.614 PushMeBaby[7193:a0f] SSLSetIOFuncs(): 0
2010-02-01 07:20:49.614 PushMeBaby[7193:a0f] SSLSetConnection(): 0
2010-02-01 07:20:49.615 PushMeBaby[7193:a0f] SSLSetPeerDomainName(): 0
2010-02-01 07:20:49.631 PushMeBaby[7193:a0f] SecKeychainOpen(): 0
2010-02-01 07:20:49.648 PushMeBaby[7193:a0f] SecCertificateCreateFromData(): 0
2010-02-01 07:20:49.655 PushMeBaby[7193:a0f] SecIdentityCreateWithCertificate(): 0
2010-02-01 07:20:49.656 PushMeBaby[7193:a0f] SSLSetCertificate(): 0
2010-02-01 07:20:52.353 PushMeBaby[7193:a0f] SSLHandshake(): 0
2010-02-01 07:20:57.954 PushMeBaby[7193:a0f] SSLWrite(): 0 144

以上是PusheBaby xcode应用的日志。

【问题讨论】:

  • 需要更多信息来帮助,比如你的应用程序中的相关代码等。
  • 如果您解决了上述问题,请发布答案。面临同样的问题。

标签: iphone apple-push-notifications


【解决方案1】:

好的 - 想通了。

我传入的设备令牌(我从 UrbanAirship 获得)没有空格。根据这个很棒的教程 (http://mobiforge.com/developing/story/programming-apple-push-notification-services),我从 iPhone 应用程序的控制台中使用了设备令牌,字符串中每 8 个字符之间有空格。成功了。

设备令牌应如下所示 - 38c866dd bb323b39 ffa73487 5e157ee5 a85e0b7c e90d56e9 fe145bcc 6c2c594b

稍后 - 当您查看 PushMeBaby 的 NSLog 时 - 您会看到 SSLWrite 调用中的“已处理”计数增加了 1(我的从 104 变为 105) 例如2011-04-28 11:21:41.543 PushMeBaby[49218:903] SSLWrite(): 0 105

希望这可以帮助那些像我一样挣扎了好几天的人......

【讨论】:

  • 感谢您的回答。 我终于在服务器端切换到了一些 java 替代方案。这可能会帮助其他人。
  • 使用this代替Pushmebaby,不需要手动添加空间。
【解决方案2】:

我只是想我会在这里加两分钱,因为这也吸引了我。如果您意识到设备令牌应该有空格,那么为了再也不会出现这个问题,请替换这段代码:

    // Validate input.
    if(self.deviceToken == nil || self.payload == nil) {
        return;
    }

用这个:

    // Validate input.
    if(self.deviceToken == nil || self.payload == nil) {
        return;
    }
    else if(![self.deviceToken rangeOfString:@" "].length)
    {
        //put in spaces in device token
        NSMutableString* tempString =  [NSMutableString stringWithString:self.deviceToken];
        int offset = 0;
        for(int i = 0; i < tempString.length; i++)
        {
            if(i%8 == 0 && i != 0 && i+offset < tempString.length-1)
            {
                //NSLog(@"i = %d + offset[%d] = %d", i, offset, i+offset);
                [tempString insertString:@" " atIndex:i+offset];
                offset++;
            }
        }
        NSLog(@" device token string after adding spaces = '%@'", tempString);
        self.deviceToken = tempString;
    }

【讨论】:

    【解决方案3】:

    是的,对于 Push me baby,设备令牌应该是

    45f62964 06523099 b66017f7 0eb3ea7d 14140c11 af6f14a0 c24145d1 90005763
    
    not
    <45f62964 06523099 b66017f7 0eb3ea7d 14140c11 af6f14a0 c24145d1 90005763>
    or
    45f6296406523099b66017f70eb3ea7d14140c11af6f14a0c24145d190005f9c
    

    如果你包含 ,它会在 NSScanner 中进入无限循环

    虽然正式的设备令牌应该包括 和空格,因为这就是您在 RegisterDevice 时得到的 如果您在MAC APP STORE上的APN TESTER等其他应用程序中使用它

    <45f62964 06523099 b66017f7 0eb3ea7d 14140c11 af6f14a0 c24145d1 90005763>
    

    【讨论】:

      【解决方案4】:

      在前面加上这个

      // Convert string into device token data.
      

      -(IBAction)push:(id)sender;ApplicationDelegate.h

      if (![self.deviceToken rangeOfString:@" "].length) {
          NSMutableString *string = [self.deviceToken mutableCopy];
          for (int i = 8; i < string.length; i+=8) {
              [string insertString:@" " atIndex:i];
          }
          self.deviceToken = string;
      }
      

      现在你支持“无空格”格式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多