Android-应用程序没有收到来自解析平台的推送通知
Posted
技术标签:
【中文标题】Android-应用程序没有收到来自解析平台的推送通知【英文标题】:Android- App does not receive push notifications from parse platform 【发布时间】:2018-09-08 13:05:39 【问题描述】:我正在使用解析平台,但我无法在我的设备 android 上收到任何通知。
这是我的manifest
:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="lib.finder.ir.deletme">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<application
android:name=".App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<service
android:name="com.parse.fcm.ParseFirebaseInstanceIdService"
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<service
android:name="com.parse.fcm.ParseFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<receiver
android:name="com.parse.ParsePushBroadcastReceiver"
android:exported="false">
<intent-filter>
<action android:name="com.parse.push.intent.RECEIVE" />
<action android:name="com.parse.push.intent.DELETE" />
<action android:name="com.parse.push.intent.OPEN" />
</intent-filter>
</receiver>
<meta-data
android:name="com.parse.push.notification_icon"
android:resource="@drawable/ic_message" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我的App.java
:
public class App extends Application
@Override
public void onCreate()
super.onCreate();
// Use for monitoring Parse OkHttp traffic
// Can be Level.BASIC, Level.HEADERS, or Level.BODY
// See http://square.github.io/okhttp/3.x/logging-interceptor/ to see the options.
OkHttpClient.Builder builder = new OkHttpClient.Builder();
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
builder.networkInterceptors().add(httpLoggingInterceptor);
Parse.initialize(new Parse.Configuration.Builder(this)
.applicationId("1")
// if defined
.clientKey("1")
.server("http://1:80/parse/")
.clientBuilder(builder)
.build()
);
Parse.setLogLevel(Parse.LOG_LEVEL_DEBUG);
// Save the current Installation to Parse.
ParseInstallation.getCurrentInstallation().saveInBackground();
ParsePush.subscribeInBackground("", new SaveCallback()
@Override
public void done(ParseException e)
if (e == null)
Log.i("log", "A: successfully subscribed to the broadcast channel.");
else
Log.i("log", "B: failed to subscribe for push", e);
);
还有GetPush.java
:
public class GetPush extends ParsePushBroadcastReceiver
@Override
public void onReceive(Context context, Intent intent)
super.onReceive(context, intent);
@Override
protected void onPushReceive(Context context, Intent intent)
super.onPushReceive(context, intent);
@Override
protected void onPushOpen(Context context, Intent intent)
super.onPushOpen(context, intent);
我得到google-services.json
然后添加到我的项目中。
"project_info":
"project_number": "344518768459",
"firebase_url": "https://parsetest-f7e60.firebaseio.com",
"project_id": "parsetest-f7e60",
"storage_bucket": "parsetest-f7e60.appspot.com"
,
"client": [
"client_info":
"mobilesdk_app_id": "1:344518768459:android:a36a6a64540561a3",
"android_client_info":
"package_name": "lib.finder.ir.deletme"
,
"oauth_client": [
"client_id": "344518768459-09g2pnfhscijt01e4ee8hr02mqaovurh.apps.googleusercontent.com",
"client_type": 3
],
"api_key": [
"current_key": "AIzaSyBZg-xc8vq5Eu2OJQIaDTbe91W5l5XA1eA"
],
"services":
"analytics_service":
"status": 1
,
"appinvite_service":
"status": 1,
"other_platform_oauth_client": []
,
"ads_service":
"status": 2
],
"configuration_version": "1"
【问题讨论】:
【参考方案1】:试试这个,
在Manifest文件中添加以下代码,
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<service android:name="com.parse.fcm.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name="com.parse.fcm.MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
MyFirebaseMessagingService.java 文件
public class MyFirebaseMessagingService extends FirebaseMessagingService
public static String FCMTAG = "FCM Message";
public static String FCMSTATE = "FCMSTATE";
JSONObject jsonObject;
public MyFirebaseMessagingService()
super();
@Override
public void onMessageSent(String s)
Log.v("Fcm", "MyFirebaseMessagingService :: onMessageSent " + s);
super.onMessageSent(s);
@Override
public void onMessageReceived(RemoteMessage remoteMessage)
try
if (remoteMessage != null && remoteMessage.getNotification() != null)
RemoteMessage.Notification notification = remoteMessage.getNotification();
if (notification.getTitle() != null && notification.getBody() != null)
String title = notification.getTitle();
String message = notification.getBody();
Log.d("FCM", "Title: " + title + " , Message: " + message);
showStatusBarNotification(title, message);
catch (Exception e)
Log.d("FCM", "Error : " + e.getMessage());
e.printStackTrace();
private void showStatusBarNotification(String title, String sendMessage)
//Code to show Push notification on Toolbar
MyFirebaseInstanceIDService.java 文件
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService
private static final String TAG = "Fcm";
Context context;
String token;
public MyFirebaseInstanceIDService()
public MyFirebaseInstanceIDService(Context context)
this.context = context;
onTokenRefresh();
@Override
public void onTokenRefresh()
FirebaseApp.initializeApp(context);
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.v(TAG, "MyFirebaseInstanceIDService: Refreshed token: " + refreshedToken);
public String getToken()
return token;
现在你需要在Activity页面的onCreate
函数上初始化MyFirebaseInstanceIDService来生成推送令牌,
new MyFirebaseInstanceIDService(ShopLoginActivity.this);
【讨论】:
【参考方案2】:从下面的服务中删除android:exported="false"
。
<service
android:name="com.parse.fcm.ParseFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
可能来自 Firebase 配置设置。
也许您应该再次阅读本教程。 https://docs.parseplatform.org/tutorials/android-push-notifications/ 验证您是否一切正常。由于您的代码很干净,我无法弄清楚出了什么问题
【讨论】:
以上是关于Android-应用程序没有收到来自解析平台的推送通知的主要内容,如果未能解决你的问题,请参考以下文章
关闭应用程序时,Android 不会收到来自 Parse Push 的推送通知