Android推送通知-我的服务应该扩展GCMBaseIntentService还是IntentService

Android推送通知-我的服务应该扩展GCMBaseIntentService还是IntentService,android,Android,我试图创建的推送功能的基本架构是 1) 我会获取手机id并将其存储在我的数据库中 2) 只有当服务器上出现问题时,我才会尝试创建推送消息 因此,我不需要应用程序尝试调用服务器向其发送消息的部分。我想知道我应该在服务类中扩展什么,需要在服务类中实现什么方法 另外,我是否能够在不使用服务器的情况下获取设备id并将该信息发送到我的服务器 我正在使用谷歌云消息 谢谢 好的,要获取手机的注册ID,您需要在活动中执行以下操作: import com.google.android.gcm.GCMRe

我试图创建的推送功能的基本架构是

1) 我会获取手机id并将其存储在我的数据库中

2) 只有当服务器上出现问题时,我才会尝试创建推送消息

因此,我不需要应用程序尝试调用服务器向其发送消息的部分。我想知道我应该在服务类中扩展什么,需要在服务类中实现什么方法

另外,我是否能够在不使用服务器的情况下获取设备id并将该信息发送到我的服务器

我正在使用谷歌云消息


谢谢

好的,要获取手机的注册ID,您需要在活动中执行以下操作:

     import com.google.android.gcm.GCMRegistrar;
    private final static String SENDER_ID = "0001234567" // API Key, see comments;

    public class myActivity extends Activity {

        @Override
        public void onCreate(Bundle savedInstanceState) 
        {

            GCMRegistrar.checkDevice(this);
            GCMRegistrar.checkManifest(this);
            regId = GCMRegistrar.getRegistrationId(this);
 if (regId.equals("")) 
        {
             GCMRegistrar.register(this, SENDER_ID);
             Log.i(TAG,"registered a new ID");
        } 
        else 
        {
            Log.i(TAG,"Already Registered");
        }
您的google注册将包含在regId中

您需要在您的舱单中包含以下内容:

<receiver
        android:name="com.google.android.gcm.GCMBroadcastReceiver"
        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="my.namespace" />
        </intent-filter>
    </receiver>


其中my.namespace将等于您的包名

,您可以按照此操作。。它使用新的GoogleCloudMessagingAPI。是的,您应该扩展IntentService,因为其他服务现在已经不推荐了。

您的问题很不清楚。让我们一次完成这一点。你说的手机id是什么意思?@Kevin Bradshaw我指的是我要向其发送推送通知的手机的唯一id。它是发出推送通知所需的id。这有助于让事情变得更清楚吗?:)谢谢,但是在第一次打开应用程序时,if/else会转到if块还是else块?我只是想弄清楚何时发送远程呼叫。编辑了代码以显示如何处理首次注册。按照此处的说明获取您的发件人ID