【问题标题】:Android- App does not receive push notifications from parse platformAndroid-应用程序没有收到来自解析平台的推送通知
【发布时间】: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"
}

【问题讨论】:

    标签: android firebase parse-platform push-notification


    【解决方案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/ 验证您是否一切正常。由于您的代码很干净,我无法弄清楚出了什么问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-19
        • 1970-01-01
        相关资源
        最近更新 更多