onMessageReceived()没有被调用

时间:2015-11-01 20:22:40

标签: android google-cloud-messaging

和其他人一样,我似乎也无法让GCM发挥作用。特别是,我看不出为什么执行没有达到GcmListenerService.onMessageReceived()。

我已经按照官方文档进行操作并设法(我认为)正确执行以下操作:

  • 使用InstanceID
  • 获取注册令牌
  • 将此令牌发送回本地 Rails服务器进行存储
  • 随后,使用相同的令牌使用GCM发送消息(无通知)。

代码的相关位如下。如果有什么不妥,请告诉我。

的AndroidManifest.xml

<!-- GCM specific -->
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission android:name="com.gradians.prepwell.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />
<uses-permission android:name="com.gradians.prepwell.permission.C2D_MESSAGE"/>

<receiver android:name="com.google.android.gms.gcm.GcmReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.gradians.prepwell" />
</intent-filter>
</receiver>

<service android:name=".services.MyGcmListenerService" android:exported="false">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</service>

<service android:name=".services.MyInstanceIDListenerService"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.gms.iid.InstanceID" />
</intent-filter>
</service>

<service android:name=".services.RegisterService"
android:exported="false" />

MyGcmListenerService.java(未被调用)

public class MyGcmListenerService extends GcmListenerService {
@Override
public void onMessageReceived(String from, Bundle data) {
    Log.i("debug", "onMessageReceived") ;
}
}

Rails代码

def post_potd
api_key = "AIz......-_Y"
gcm = GCM.new(api_key)
reg_ids = Device.all.map(&:gcm_token)
payload = { 
  data: { message: "Hello Dude!" }
}   
response = gcm.send reg_ids, payload 
render json: response, status: :ok 
end 

对上面的Rails代码的JSON响应似乎没问题(status_code = 200,响应=&#39;成功&#39;等等)。所以,我猜测GCM对发布的请求没有任何问题。

但GCM集成中是否还有其他常见的陷阱需要注意?怎么能检查它们?

我以为我做得对。但我显然错过了一些东西。因此,任何见解/提示/建议都将是最有帮助的。

由于 阿比纳夫。

0 个答案:

没有答案