和其他人一样,我似乎也无法让GCM发挥作用。特别是,我看不出为什么执行没有达到GcmListenerService.onMessageReceived()。
我已经按照官方文档进行操作并设法(我认为)正确执行以下操作:
代码的相关位如下。如果有什么不妥,请告诉我。
的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集成中是否还有其他常见的陷阱需要注意?怎么能检查它们?
我以为我做得对。但我显然错过了一些东西。因此,任何见解/提示/建议都将是最有帮助的。
由于 阿比纳夫。