ParseInstallation 保存后解析 deviceToken 为空

Posted

技术标签:

【中文标题】ParseInstallation 保存后解析 deviceToken 为空【英文标题】:Parse deviceToken empty after ParseInstallation save 【发布时间】:2015-07-07 13:52:10 【问题描述】:

我正在开发一个使用 Parse 发送和接收通知的应用程序。现在的问题是,当我注册安装时 deviceToken 为空(deviceType 和 installationId 不为空)。当此令牌为空时,我无法收到任何通知。

我如何注册安装:

Parse.initialize(this, "x", "x");
ParseInstallation.getCurrentInstallation().saveInBackground();

当我将 Parse 的所有代码添加到我的应用 (https://www.parse.com/apps/quickstart#parse_push/android/native/existing) 时,一切正常。

我的 AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xxx.xxx" >

    <uses-sdk android:maxSdkVersion="17" />
    <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" />

    <permission android:protectionLevel="signature"
        android:name="com.xxx.xxx.permission.C2D_MESSAGE" />
    <uses-permission android:name="com.xxx.xxx.permission.C2D_MESSAGE" />

    <application
        android:name="com.xxx.xxx.Name_"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:logo="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <meta-data
            android:name="com.google.android.gms.analytics.globalConfigResource"
            android:resource="@xml/global_tracker" />

        <activity
            android:name="com.xxx.xxx.Activities.SplashActivity_"
            android:screenOrientation="portrait"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.xxx.xxx.Activities.LoginActivity_"
            android:screenOrientation="portrait"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name="com.xxx.xxx.Activities.ForgotPassword_"
            android:screenOrientation="portrait"
            android:label="@string/app_name">
        </activity>
        <activity
            android:name="com.xxx.xxx.Activities.MainActivity_"
            android:screenOrientation="portrait"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name="com.xxx.xxx.Activities.EditProfile_"
            android:screenOrientation="portrait"
            android:label="@string/edit_profile" >
        </activity>

        <receiver android:name="com.google.android.gms.analytics.AnalyticsReceiver"
            android:enabled="true">
            <intent-filter>
                <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" />
            </intent-filter>
        </receiver>
        <service android:name="com.google.android.gms.analytics.AnalyticsService"
            android:enabled="true"
            android:exported="false"/>

        <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=".Receiver.MyPushBroadcastReceiver"
            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" />

                <category android:name="com.xxx.xxx" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

我刚刚创建了一个新应用程序,添加了 Parse 并删除了 Parse 中的 Installation 类/表,但仍然没有 deviceToken。

【问题讨论】:

你在android清单中配置了所有标签吗?我的意思是: 是的,我有。我关注了parse.com/apps/quickstart#parse_push/android/native/existing 奇怪的是,当我第一次使用它时它起作用了,但是从今天(或昨天)开始我无法收到任何通知。 即使我在使用 Parse 1.9.3 Android 时也遇到了这个问题。我在 Application 类中运行 saveInBackground() 。第一次打开应用程序时,它会保存除 deviceToken 和 pushType 之外的所有详细信息。但是当我关闭应用程序并再次重新打开它时,它会更新 Parse 安装类中的 deviceToken 和 pushType。需要帮助。 @LucaIaco 【参考方案1】:

我认为这是新 Parse SDK 中的一个错误。我降级到 1.9.0,现在一切正常。

来源:https://groups.google.com/forum/#!topic/parse-developers/a1Z0SSC304M

【讨论】:

根据其发行说明 (parse.com/docs/downloads) 已在 1.9.4 中修复 即使在 1.10.1 中仍然遇到同样的问题,所以现在降级似乎是唯一的选择? 我在 1.12.0 中,我有很多没有 deviceToken 的安装。我们怎样才能解决它?我们可以在安装中删除行吗?

以上是关于ParseInstallation 保存后解析 deviceToken 为空的主要内容,如果未能解决你的问题,请参考以下文章

在解析中为 Android 设置 DeviceToken

解析推送安卓。使用网络工作 - 不使用移动设备工作

cocos2d-x 中XML解析与数据存储

格式化输出IIS绑定格式和批量解析域名

harview .har文件解析

解析后保存云函数返回成功结果但不执行成功函数