我将通过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?
感谢您阅读我的详细说明。
答案 0 :(得分:0)
IOS和rails代码没有错误
我已经在ios中签了代码并通过url创建了一个pem文件
Charles Duffy
我在遵循github教程时遇到错误。
感谢。