如何让 Parse.com 推送通知在 Cordova/Phonegap Android 应用程序中工作?

Posted

技术标签:

【中文标题】如何让 Parse.com 推送通知在 Cordova/Phonegap Android 应用程序中工作?【英文标题】:How do I get Parse.com Push Notifications working in a Cordova/Phonegap Android app? 【发布时间】:2014-09-22 04:55:47 【问题描述】:

如何使用 Parse.com 向我的 Cordova 3.5.0 Android 应用发送推送通知。

大多数帖子似乎涵盖了我的问题的某些方面,但不是全部(Parse/android 或 Phonegap/Parse)

我实际上已经解决了这个问题,但我将完整的解决方案放在这里,因为我不得不使用各种零散的解决方案和论坛来找到答案,我认为 Cordova/Phonegap 和 Parse 在越来越流行的组合,而且似乎遇到类似问题的人很多。

【问题讨论】:

【参考方案1】:

我已经问了很多类似的问题,并进行了大量的谷歌搜索,并设法从不同的地方拼凑出一个解决方案。

我已经通过命令行使用 Cordova 3.5.0 构建了我的应用程序。我相信这些步骤同样适用于 Phonegap 3.5.0,并且可能是两者的早期版本,只要它是 post 3 (CLI)。我正在使用 Eclipse 和 Google 的 ADT 工具

这不适用于 Phonegap Build,因为您必须在 Android 项目中编辑 Java 和 XML 文件

对于那些不知道的人,Phonegap 是 Adob​​e 的 Cordova 发行版,非常相似,但有一些额外的功能,我认为主要用于 Phonegap Build。

就本文而言,您可以将 Cordova 替换为 Phonegap,至少在以下步骤中。使用 Cordova CLI 创建项目后,您需要执行所有这些步骤

Cordova/Parse 插件

我使用以下插件连接 Parse 和 Cordova。该插件有多个版本,已经分叉了好几次,但 Github 用户 benjie 的版本为您提供了最大程度的自动化,最大限度地减少了您使用源代码。安装说明见 Github 页面:

https://github.com/benjie/phonegap-parse-plugin(不再维护 - 尝试不同的分叉)

更新活动

您现在需要开始编辑源代码。

在 Eclipse 导航器的 src 部分中为您的应用找到主 Activity 类,它将位于您的主包中,类似于 com.company.myapp然后是 Example.java 文件(假设 Example 是您的项目名称)。它将由 Cordova 为您生成。

在文件中添加这个导入,它可以放在其余的导入语句之后:

import com.parse.ParseAnalytics;

然后在 onCreate 方法的末尾添加这个,以便在用户从 PN 打开应用程序时在 Parse 中进行跟踪

ParseAnalytics.trackAppOpened(getIntent());

扩展应用程序

这最后一部分是我从旧的 Parse 帮助论坛中获得的,并且花费了我最长的时间来解决。

如果您将应用程序保持原样,您可以接收推送通知。实际上,您应该对其进行测试以确保到目前为止您已经完成了正确的操作。

...但是如果您强制关闭应用程序(例如,在 Galaxy S2 上按住主屏幕按钮,然后将应用程序滑开),您将阻止应用程序接收推送通知。

我相信这是因为您通过强制关闭应用程序(包括 PN 的侦听器)来扼杀应用程序的各个方面。

使用以下帖子,我设法让应用在强制关闭后接收 PN:

https://www.parse.com/questions/push-notification-in-android-while-app-closed https://www.parse.com/questions/cannot-send-push-to-android-after-app-is-closed-until-screen-unlock

我的实际解决方案是执行以下 2 个步骤:

1:在 Eclipse 的 src 部分的 com.company.myapp 中,在 Example.java 旁边添加一个名为 ExampleApplication.java 的新文件。该文件需要以下内容,并针对您的项目进行相应更新(例如您的包和解析密钥):

package com.company.myapp;

import android.app.Application;
import android.content.Context;

import com.parse.Parse;
import com.parse.ParseInstallation;
import com.parse.PushService;

import com.company.myapp.Example;

public class ExampleApplication extends Application 

    private static ExampleApplication instance = new ExampleApplication();

    public ExampleApplication() 
        instance = this;
    

    public static Context getContext() 
        return instance;
    

    @Override
    public void onCreate() 
        super.onCreate();
        // register device for parse
        Parse.initialize(this, "APP_KEY", "CLIENT_KEY");
        PushService.setDefaultPushCallback(this, Example.class);
        ParseInstallation.getCurrentInstallation().saveInBackground();
    

2:更新您的 AndroidManifest.xml,使您的 <application> 标签具有以下属性,以及它已有的属性:

android:name="com.company.myapp.ExampleApplication"

总结

完成此操作后,您应该能够将通知推送到您的 Android 应用程序。

总结一下:

安装 Phonegap/Parse 插件 更新主 Activity 类 扩展主应用程序类

这可能可以转移到非 Eclipse 项目,大多数步骤将保持几乎相同,如果有人对 Android Studio 或在没有 IDE 的情况下构建有任何反馈,那么我们可以更新此答案以反映这一点。

【讨论】:

非常有用的信息。您如何处理推送通知的接收?你在使用 Cordova 推送通知插件吗? Cordova/Parse 插件部分,github.com/benjie/phonegap-parse-plugin【参考方案2】:

这个插件在我的应用中运行良好

https://github.com/benjie/phonegap-parse-plugin

【讨论】:

是的,这就是我在指南中使用的插件,但我展示的不仅仅是插件的整个过程,因为它就像包含插件一样简单

以上是关于如何让 Parse.com 推送通知在 Cordova/Phonegap Android 应用程序中工作?的主要内容,如果未能解决你的问题,请参考以下文章

从 Parse.com 查询或保存传入的推送通知

如何使用 Parse.com Cloudcode 发送推送通知

如何在 Android 中禁用多个推送通知图标,我正在使用 Parse.com

如何检查我是不是已经订阅了 parse.com 推送通知

如何使用 Parse.com 推送通知服务在 Android 应用程序中推送 URL?

从 parse.com 控制台接收推送时显示警报对话框而不是通知