Android- App不会从解析平台接收推送通知
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android- App不会从解析平台接收推送通知相关的知识,希望对你有一定的参考价值。
我在解析平台上使用但我无法在我的设备上收到任何通知。
这是我的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"
}
答案
试试这个,
在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);
另一答案
从以下服务中删除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- App不会从解析平台接收推送通知的主要内容,如果未能解决你的问题,请参考以下文章