質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

2回答

2058閲覧

androidでプッシュ通知が受信でき無い

t.ysd

総合スコア8

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2016/11/13 08:30

###前提・実現したいこと
プッシュ通知を受信したことをユーザーに知らせるためのシステムを作っています。

端末がスリープやロック画面などの状態でもプッシュ通知を受信し、
通知エリアへの登録を行いたい。
(端末がホーム画面などでは正常にプッシュ通知を受信でき、通知エリアに通知を表示することもできています)

###発生している問題・エラーメッセージ

端末がスリープやロック画面等になってから1分ほど経過すると
通知を受け取れなくなってしまいます。

MyGcmListenerService.javaのonMessageReceived()メソッドにブレイクポイントを設定してデバッグ実行をした所、
スリープ1分後にはこのメソッドが呼ばれなかった。
それまではプッシュ通知を受信してブレイクポイントで止まった。

ロック解除後、ホーム画面に遷移した際にMyGcmListenerService.javaのonMessageReceived()メソッドが呼ばれていた。

###該当のソースコード

プッシュ通知実装のサンプルを元にAndroidManifestや
GcmListenerなどを編集しています。

AndroidManifest.xml

xml

1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="パッケージ名"> 4 5 <uses-permission android:name="android.permission.INTERNET" /> 6 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 7 <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 8 <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 9 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 10 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 11 <uses-permission android:name="android.permission.READ_CONTACTS" /> 12 <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> 13 <uses-permission android:name="com.android.vending.BILLING" /> 14 15 <permission 16 android:name="パッケージ名.permission.C2D_MESSAGE" 17 android:protectionLevel="signature" /> 18 <uses-permission android:name="パッケージ名.permission.C2D_MESSAGE" /> 19 20 <application 21 android:name="パッケージ名.App" 22 android:allowBackup="true" 23 android:icon="@mipmap/ic_launcher" 24 android:label="@string/app_name" 25 android:supportsRtl="true" 26 android:theme="@style/AppTheme" > 27 28 <!--This meta-data tag is required to use Google Play Services.--> 29 <meta-data android:name="com.google.android.gms.version" 30 android:value="@integer/google_play_services_version" /> 31 32 <activity 33 android:name="パッケージ名.MainActivity"> 34 <intent-filter> 35 <action android:name="android.intent.action.MAIN" /> 36 <category android:name="android.intent.category.LAUNCHER" /> 37 </intent-filter> 38 </activity> 39 40 <!-- プッシュ通知 --> 41 <receiver 42 android:name="com.google.android.gms.gcm.GcmReceiver" 43 android:exported="true" 44 android:permission="com.google.android.c2dm.permission.SEND" > 45 <intent-filter> 46 <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 47 <category android:name="パッケージ名" /> 48 <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 49 </intent-filter> 50 </receiver> 51 <service 52 android:name="パッケージ名.Libs.MyGcmListenerService" 53 android:exported="false" > 54 <intent-filter> 55 <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 56 </intent-filter> 57 </service> 58 <service 59 android:name="パッケージ名.Libs.MyInstanceIDListenerService" 60 android:exported="false"> 61 <intent-filter> 62 <action android:name="com.google.android.gms.iid.InstanceID"/> 63 </intent-filter> 64 </service> 65 66 <service android:name="パッケージ名.Libs.RegistrationIntentService" /> 67 68 </application> 69</manifest>

MyGcmListenerService.java

java

1package パッケージ名.Libs; 2 3/** 4import 略 5 */ 6 7public class MyGcmListenerService extends GcmListenerService { 8 9 @Override 10 public void onMessageReceived(String from, Bundle data) { 11 String message = data.getString("message"); 12 sendNotification(message); 13 } 14 15 private void sendNotification(String message) { 16 // 通知エリアに通知を表示する処理(略) 17 } 18}

###補足情報(言語/FW/ツール等のバージョンなど)
'com.google.android.gms:play-services-gcm:8.4.0'を使用
テスト端末はAndroid4.1.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

サーバー側の処理でスリープ状態でもpush通知を送信するフラグが存在しており、
そのフラグを設定することで解決しました。

投稿2016/12/29 10:55

t.ysd

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

起動方法を、見ないとわかりませんが。
Context#startServiceを使っていますか?

投稿2016/11/13 10:16

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t.ysd

2016/11/15 12:26

MyGcmListenerServiceをstartServiceで起動する処理は特に記述していません。 com.google.android.gms.gcm.GcmReceiverが起動していると思っていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問