Android Studio:应用程序不会从parse.com接收推送通知

时间:2015-04-14 12:20:44

标签: android android-studio parse-platform push-notification

我知道这个问题已被多次询问,但我仍然无法从parse.com获得推送通知

推送通知正在从parse.com成功发送,但我的应用程序没有收到它们。

大多数人都使用此解决问题:I can't receive push notifications in app from Parse bt对我不起作用。

我也试过Android - Can not Receive Push from Parse.com

有些人建议更改软件包的名称,我这样做,甚至创建了一个新的应用程序,但没有帮助。

注意:我导入了parse-1.9.1.jar和bolt-android-1.2.0.jar

这是我的MainActivity

package com.example.user.parsetest;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import com.parse.Parse;
public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Parse.initialize(this, "********", "********");

}
}

我尝试按照许多答案中的建议添加自定义PushReceiver

package com.example.user.parsetest;

import android.app.Activity;
import android.app.Notification;
import android.content.Context;
import android.content.Intent;
import com.parse.ParsePushBroadcastReceiver;

public class Receiver extends ParsePushBroadcastReceiver {

@Override
protected Notification getNotification(Context context, Intent intent) {
    // TODO Auto-generated method stub
    return super.getNotification(context, intent);
}

@Override
public void onPushOpen(Context context, Intent intent) {
    Intent i = new Intent(context, MainActivity.class);
    i.putExtras(intent.getExtras());
    i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);
}
@Override
protected void onPushReceive(Context context, Intent intent) {
    //here You can handle push before appearing into status e.g if you want to stop it.
    super.onPushReceive(context, intent);

}
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <service android:name="com.parse.PushService" />
    <receiver android:name="com.parse.ParseBroadcastReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.USER_PRESENT" />
        </intent-filter>
    </receiver>
    <receiver android:name="com.example.user.parsetest.Receiver"
        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>
    <receiver android:name="com.parse.GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <!--
              IMPORTANT: Change "com.parse.starter" to match your app's package name.
            -->
            <category android:name="com.example.user.parsetest" />
        </intent-filter>
    </receiver>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <meta-data android:name="com.parse.push.notification_icon"
        android:resource="@drawable/ic_launcher"/>

    <!--
      IMPORTANT: Change "com.parse.starter.permission.C2D_MESSAGE" in the lines below
      to match your app's package name + ".permission.C2D_MESSAGE".
    -->
    <permission android:protectionLevel="signature"
        android:name="com.example.user.parsetest.permission.C2D_MESSAGE" />
    <uses-permission android:name="com.example.user.parsetest.permission.C2D_MESSAGE" />
</application>

无法找出问题所在。请帮助。

2 个答案:

答案 0 :(得分:0)

在Parse.initialize(appkey,clientkey)行之后的Application类中;只需添加以下行即可。

// Current installation object
ParseInstallation parseInstallation = ParseInstallation.getCurrentInstallation();

// Save the updated installation object
parseInstallation.saveInBackground(new SaveCallback() {
    @Override
    public void done(ParseException e) {
        MyLog.e(MainApplication.class.getSimpleName(), "Installation object saved "+((e!=null)?"failed":"successfully"));
    }
 });

答案 1 :(得分:0)

尝试下载此项目:https://www.dropbox.com/s/fpp22fi2o7c8vai/PushParse.zip?dl=0

它包含1.4.3 lib jar文件。它已经过时了,但它正在发挥作用。

我做了一些调整,设法将其更新到最新的库(1.9.2)。

注意logcat中出现的错误。我得到了这个:error setting up push notification using parse.com and android studio

如果通过确保我的Android清单非常干净和有条理来修复。遵循结构。

这是我更新的解析库的代码:

public class ParsePushNotification extends Application {

    public ParsePushNotification() {
    }


    public void onCreate(){
        super.onCreate();

        Log.d("!!!", "This was called. Parse");
        Parse.initialize(this, "paste your app id here", "paste your client id her");
//        PushService.setDefaultPushCallback(this, LoginActivity.class);
//        ParseInstallation.getCurrentInstallation().saveInBackground();
        ParsePush.subscribeInBackground("", new SaveCallback() {
            @Override
            public void done(ParseException e) {
                if (e == null) {
                    Log.d("com.parse.push", "successfully subscribed to the broadcast channel.");
                } else {
                    Log.e("com.parse.push", "failed to subscribe for push", e);
                }
            }
        });
    }
}

这个类应该在你的清单中使用:

<application
      android:name="com.example.app.ParsePushNotification"

这是我的接收器类:

public class Receiver extends ParsePushBroadcastReceiver {
    @Override
    public void onPushOpen(Context context, Intent intent) {
        Intent i = new Intent(context, LoginActivity.class);
        i.putExtras(intent.getExtras());
        i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(i);
    }
}

这是我的清单:

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <permission android:name="com.example.app.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />
    <uses-permission android:name="com.example.app.permission.C2D_MESSAGE" />

<application
        android:name="com.example.app.ParsePushNotification"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.NoTitle">

    <meta-data
        android:name="com.parse.push.notification_icon"
        android:resource="@drawable/ic_launcher" />

    <activity
        android:name=".LoginActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <service android:name="com.parse.PushService" />
    <receiver android:name="com.parse.ParseBroadcastReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.USER_PRESENT" />
        </intent-filter>
    </receiver>
    <receiver android:name="com.parse.GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <category android:name="com.example.app" />
        </intent-filter>
    </receiver>
    <receiver android:name="com.example.app.Receiver"
        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>
</application>
祝你好运!