推送通知并不适用于杂货店

时间:2016-03-01 14:35:02

标签: ios ruby-on-rails push-notification resque

我将通过rails后端向ios设备发送通知 我已经将杂货店gem添加到Gemfile中,然后将其安装在项目中。

gem 'grocer'

我计划在后台模式下发送通知。所以我创建了resque作业并在app / jobs / notificationsender.rb中添加了杂货商逻辑。

def self.perform(language)
    @lang = language

    # Thread.new do
      while true

        begin
            pusher = Grocer.pusher(certificate:  "#{Rails.root}/lib/notification/cer.pem", # required
                       passphrase:  "llvc",                         # optional
                       gateway:     "gateway.sandbox.push.apple.com", # optional
                       port:        2195,                             #optional
                       retries:     3)

        feedback = Grocer.feedback( certificate:  "#{Rails.root}/lib/notification/cer.pem", # required
                                  passphrase:  "llvc",                        
                                  gateway:     "feedback.sandbox.push.apple.com", 
                                  port:        2196,                     
                                  retries:     3)

        note = Grocer::Notification.new(
          device_token: device_token,
          alert: message,
          sound: 'default',
          badge: 0,
          expiry: Time.now + 60*60,
          content_available: true,
          custom: {
            "linkname": linkname,
            "linkurl": linkurl
          }
        )

        feedback.each do |attempt|
          puts "Device #{attempt.device_token} failed at #{attempt.timestamp}"
        end

        pusher.push(note)
        rescue Exception => e
            puts e.class
            puts e
        end

        sleep(5)
      end #while
  end

我从iphone获得了设备令牌并将其发送到后端。

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    _deviceToken = deviceToken;

    // Store the deviceToken in the current installation and save it to Parse.
    if (currentInstallation == nil) {
        currentInstallation = [[BSGInstallation alloc] init];
    }

    currentInstallation.delegate = self;
    [currentInstallation setDeviceTokenFromData:deviceToken];
    [currentInstallation saveInBackground];
}

我下载了一个苹果推送开发证书并从中生成了p12,然后从命令行创建了cer.pem文件。
我使用app development cer签署了ios项目,用于调试和分发发布和分配的开发配置。当然,我正确地将设备标识符添加到配置中 在构建ios,后端,resque作业之后,我在iPhone中每5秒钟收到一条通知。我在iPad上安装了该应用程序。但通知并没有登录iPad。当然,iphone和ipad的id已正确注册。我确认了iphone和ipad的设备令牌是在Grocer :: notification.new()上传递的 但该通知在iPad中无效。所以我重置服务器并重新安装在每台设备上。起初我测试了iPad。结果是一样的。然后我转向iPhone。该系统也没有在iPhone上工作。在它工作之前。这很奇怪。
所以我想知道以下内容 1)iphone或ipad收到通知的原因。我想知道尽可能多的分支,以便我可以通过遵循这些步骤来快速检测原因 2)我可以检查通知是否到达APNS?
感谢您阅读我的详细说明。

1 个答案:

答案 0 :(得分:0)

IOS和rails代码没有错误 我已经在ios中签了代码并通过url创建了一个pem文件 Charles Duffy
我在遵循github教程时遇到错误。 感谢。