2013-03-26 13 views
6

Androidアプリでプッシュ通知を実装しようとしています。だから、Googles Developersページを起動するのに良い場所はありません。AndroidでGCMを使用してプッシュ通知を送信する

私はここでこのチュートリアルに従おうとしています:GCM Demo App。チュートリアルでは、SDKマネージャを使用して提供されているサンプルコードを使用することを提案しています。これを実行してプッシュ通知を送信しようとすると、アプリが実行されているときに、新しいプッシュが到着したことが画面に表示されます。

しかし、アプリがバックグラウンドで実行されていないときは、プッシュを取得しません。通知。私はアプリを開くと、再びメッセージが画面に表示されます。しかし、私はポップアップとサウンドで通知の形で何も得ることはありません。

私は手動でアンドロイドでこれを行う必要がありますか?私はプラットフォームがあなたに通知を表示する責任がiOSに似ていると思った。

どうすれば実装できますか?

+0

コードを表示しますか?ダウンロードしたリンクからダウンロードしてください。私はプロジェクトID以外は何も変更していませんでした。 – donparalias

+0

私はこれにはとても新しいですが、アプリがない場合に通知が届くまでに時間がかかる可能性があります前景? –

+0

デバイスが正常に追加されたというメッセージが表示され、デモアプリケーションがバックグラウンドで通知されないのですか?右? – Yahor10

答えて

3

デバイスの登録を解除してもう一度登録を試みてください。 DemoActivity.javaで は、第二の立ち上げにGCMRegistrar.unregister(this);を削除し、その後、

final String regId = GCMRegistrar.getRegistrationId(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(); 
    } 
} 

はその後のAndroidManifest.xmlに

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

を入れて、

にブロードキャストを送信するクラスを作成します。
@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

+0

あなたのサーバー上で正しくない登録を編集するだけで怖くてはいけません。これは生産用アプリケーション – Yahor10

+0

で起こることはなく、なぜ最初に登録が間違っていたのですか? 1万人のユーザーが誤った登録をした場合はどうなりますか?彼らは私の通知を得ることはありませんか? – donparalias

5

でbroadcastReceiverを登録することができますが、私はポップアップと 音と通知の形で何かを得ることはありません。

通知がトリガーされたときに、サウンドをコードにプログラムすることができます。このようなことを言ってください。

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

アプリがバックグラウンドで実行されているか、いないときしかし、私は、プッシュ通知

を得るいけない、私は手動でアンドロイドでこれを行う必要がありますか?私は と思われるiOSに似ていると思っていましたが、このプラットフォームでは の通知が表示されます。

あなたのアプリはです。常にがGCMデータを送信しました(プッシュ通知)。そのデータをどのように扱うかはあなた次第です。 GCMインテントサービスは、お客様にデータを配信する責任を負います。通知サービスを使用して、ユーザーに適切な通知を表示する必要があります。

このアプローチには利点/欠点があります。プッシュ通知を受け取ったらアプリケーションコードはアンドロイドで実行されますが、これはiPhoneの場合とは異なります。また、プッシュ通知のタイプに基づいて、自動的に更新を行うか、ユーザーに通知する柔軟性があります。

アプリの起動時にデバイスを送信者IDで登録すると、期待通りに通知を受け取ることができます。すべてのプッシュ通知は、選択したGCMIntentServiceのprotected void onMessage(Context context, Intent intent)メソッドに配信されます。

+0

私はそれを修正する方法を手伝ってもらえますか?私は、サウンドを表示し、再生するための通知が必要です。 2行はすべて私が実装すべきコードですか? – donparalias

+1

それはそれより少し複雑です。通知を送信するには、この質問のコードを見てください - http://stackoverflow.com/questions/7040742/android-notification-manager-having-a-notification-without-an-intent通知ポップアップアクティビティに登録されているBroadcastReceiverにGCMメッセージを渡して、警告ダイアログを表示することができます。警告ダイアログのサンプルコード - http://www.mkyong.com/android/android-alert-dialog-example/ –

+1

@DeepakBalaあなたの答えは、アンドロイドの静かな通知に関するものです。私は、ユーザーが既にアプリにログインしている場合、Androidのサイレントプッシュ通知の作業を進めています。アプリはチャンネルに登録されていることを知る必要があります。ただし、ユーザーは通知を気にする必要はありません。どのように私はこれを行うことができますか考えていますか? –