2013-03-26 67 views
6

我想在我的android应用上实现推送通知。所以没有更好的地方开始,然后谷歌开发者页面。在Android上使用GCM的推送通知

我想在这里按照这个教程:GCM Demo App。教程建议使用通过SDK管理器给出的示例代码。这样做后,尝试发送推送通知,当应用程序正在运行时,我在屏幕上看到正在写入新推送已到达。

但是,当应用程序在后台运行或没有运行时,我不会推送通知。如果我打开应用程序,则屏幕上会再次显示消息。但我从来没有通过弹出窗口和声音通知任何形式的东西。

我手动必须在android中执行此操作吗?我认为这与iOS平台负责向您显示通知的iOS类似。

任何想法,我可以如何实现它?

+0

显示你的代码?从提供的链接下载它..我没有改变任何东西,除了我的项目ID ... – donparalias 2013-03-26 09:29:58

+0

我很新的这个,但它可能需要一段时间,直到收到通知,以防应用程序不在前景? – 2013-03-26 09:34:02

+0

你有消息说你的设备成功添加了,然后当你的Demo应用程序在后台没有收到通知?对? – Yahor10 2013-03-26 09:34:32

回答

3

尝试重新注销并注册您的设备。 在DemoActivity.java把

final String regId = GCMRegistrar.getRegistrationId(this); 
     GCMRegistrar.unregister(this); 

然后,在第二次发射删除GCMRegistrar.unregister(this);

更新

通知您的应用程序:

创建类

public class DemoApplication extends Application { 

    private class NotifyReceiver extends BroadcastReceiver{ 

     @Override 
     public void onReceive(Context context, Intent intent) { 
       Toast.makeText(context, "RECEIVE MESSAGE", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    private NotifyReceiver notifyReceiver = new NotifyReceiver(); 

    @Override 
    public void onCreate() { 
     registerReceiver(notifyReceiver, new IntentFilter("GCM_MESSAGE")); 
     super.onCreate(); 
    } 

    @Override 
    public void onTerminate() { 
     unregisterReceiver(notifyReceiver); 
     super.onTerminate(); 
    } 
} 

然后把

<application 
      android:name=".DemoApplication" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 

在AndroidManifest.xml和

发送广播
@Override 
    protected void onMessage(Context context, Intent intent) { 
     Log.i(TAG, "Received message"); 
     String message = getString(R.string.gcm_message); 
     displayMessage(context, message); 
     context.sendBroadcast(new Intent("GCM_MESSAGE")); 
     // notifies user 
     generateNotification(context, message); 
    } 

作为可选的情况下,你可以在清单,活动或前景服务

+0

为什么?你有什么想法,你认为这可能有帮助?即使它帮助不会是可怕的,记住,这将是一个生产应用程序,并推动不会工作?! – donparalias 2013-03-26 09:43:44

+0

当你在你的服务器上编辑不正确的注册时,它不应该吓人。生产应用 – Yahor10 2013-03-26 09:47:39

+0

中不会发生这种情况,为什么注册不正确?如果10000个用户获得不正确的注册会发生什么?他们永远不会收到我的通知? – donparalias 2013-03-26 09:50:01

5

注册广播接收器,但我从来没有得到的通知,弹出式和 声音的形式什么。

当通知被触发时,可以将声音编程到代码中。用这样的话说吧。

Notification notification = new Notification(icon, tickerText, when); 
notification.sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

然而,当应用程序是在背景或没有运行我没有得到一个推送通知

我必须手动在Android中做到这一点?我认为这将是类似于iOS的 ,其中平台负责向您显示 通知。

您的应用程序是始终发送了GCM数据(推送通知)。你如何处理这些数据取决于你。 GCM意图服务负责向您提供数据,就是这样。您将需要使用通知服务向用户显示适当的通知。

这种方法有优点/缺点。当您收到推送通知时,应用程序代码将在android上运行,但在iPhone上并非如此。您还可以根据推送通知的类型灵活地进行更新或通知用户。

当您的应用程序启动并且您应该收到预期的通知时,使用发件人ID注册您的设备。所有推送通知将在您选择的GCMIntentService上发送到此方法protected void onMessage(Context context, Intent intent)

+0

你能帮我如何修复它吗?我需要通知才能显示并播放声音。 2行是我应该实现的所有代码? – donparalias 2013-03-26 09:52:12

+1

这比这更有意义。要发送通知,请查看此问题中的代码 - http://stackoverflow.com/questions/7040742/android-notification-manager-having-a-notification-without-an-intent至于通知弹出您可以将GCM消息传递给注册到您的活动的BroadcastReceiver,然后可以显示警报对话框。警报对话框的示例代码 - http://www.mkyong.com/android/android-alert-dialog-example/ – 2013-03-26 10:01:02

+1

@DeepakBala你的回答说了一些关于Android上的无声通知。我正在处理Android的静默推送通知,如果用户已经登录到应用程序。该应用程序需要知道它订阅了频道。但是,用户不需要为任何通知而烦恼。你有什么想法我该怎么做? – 2015-03-26 17:45:19