Search code examples
ruby-on-rails-3rubygemsandroid-c2dm

speedy_c2dm: NoMethodError (undefined method `gsub' for nil:NilClass)


I set up speedy_c2dm to send "push" messages to android devices.

The gem was working fine, but now I get this NoMethodError message when I call

SpeedyC2DM::API.send_notification(options)

the options parameter is good, I have verified this. From the ruby-doc I got the following code from the gem:

def get_auth_token(email, password)
  data = "accountType=HOSTED_OR_GOOGLE&Email=#{email}&Passwd=#{password}&service=ac2dm"
  headers = { "Content-type" => "application/x-www-form-urlencoded",
              "Content-length" => "#{data.length}"}

  uri = URI.parse(AUTH_URL)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE

  response, body = http.post(uri.path, data, headers)
  return body.split("\n")[2].gsub("Auth=", "")
end

You can see that the last line uses gsub, so I believe the problem is in the authentication method.

I have changed the password of the account since I created this, I updated the file with the password, initializers/speedy_c2dm.rb:

C2DM_API_EMAIL = "myemail@gmail.com"
C2DM_API_PASSWORD = "mynewpassword"

SpeedyC2DM::API.set_account(C2DM_API_EMAIL, C2DM_API_PASSWORD)

Can this be causing the error? That I changed the password even though I updated this file? (Google doesn't let me to go back to the old password, I have to create a new one different from the old ones if I change it again) Its the only thing I can think of since I didn't modify the gem's code. How can I fix it? C2DM is deprecated now, but its supposed to keep working for old users. I don't want to migrate to GCM if I don't need to, everything is set up to work with C2DM

Any other ideas to fix it are welcome.


Solution

  • The problem was fixed after I removed the "two step verification" for logging in to my email.

    This change can be made in the account configuration of gmail.