【问题标题】:No device token when installation in Android device using notification from Parse使用 Parse 的通知在 Android 设备中安装时没有设备令牌
【发布时间】:2015-11-13 19:48:34
【问题描述】:

我想使用 Parse 来推送通知。当我在 Android 模拟器上测试应用程序时,我发现有些设备有 deviceToken 有些设备没有。如果没有 deviceToken,则此设备无法接收通知。我该如何解决?下面是我的代码。

public class ShooksApplication extends Application {

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

    Parse.initialize(this, "***********", "*******************");
    ParseInstallation installation = ParseInstallation.getCurrentInstallation();

    installation.saveInBackground();
}
}

并且清单正在工作,因为具有 deviceToken 的设备可以接收通知。但是我看到Installation中所有数据的pushType都是gcm。 以下是我的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cs442.project.team13" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<!--
  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.cs442.project.team13.permission.C2D_MESSAGE" />
<uses-permission android:name="com.cs442.project.team13.permission.C2D_MESSAGE" />
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:name=".ShooksApplication">
    <activity
        android:name="com.cs442.project.team13.MainPage"
        android:label="Search"
        android:theme="@style/Theme.MyCompatTheme">

        <meta-data
            android:name="android.app.default_searchable"
            android:value=".SearchBookResultsActivity" />
    </activity>

    <activity
        android:name="com.cs442.project.team13.SearchBookResultsActivity"
        android:label="SearchResult"
        android:theme="@style/Theme.MyCompatTheme">

        <!-- to identify this activity as "searchable" -->
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
        <meta-data
            android:name="android.app.default_searchable"
            android:value="com.example.ExampleActivity" />
        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />
    </activity>

    <activity android:name="com.cs442.project.team13.WishListResult"
                android:label="Wishlist"/>
    <activity android:name="com.cs442.project.team13.Details"
        android:label="Details"/>








    <activity
        android:name="com.cs442.project.team13.LoginActivity"
        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.cs442.project.team13.UpdateProfile" />

    <activity android:name="com.cs442.project.team13.RegisterActivity" />
    <activity
        android:name="com.cs442.project.team13.BookCategoryActivity"
        android:label="@string/title_activity_book_category" >
    </activity>
    <activity
        android:name="com.cs442.project.team13.PostBookActivity"
        android:label="@string/title_activity_post_book" >
    </activity>
    <activity
        android:name="com.cs442.project.team13.DisplayBookInfoActivity"
        android:label="@string/title_activity_display_book_info" >
    </activity>
    <activity
        android:name="com.cs442.project.team13.DisplayProviderInfoActivity"
        android:label="@string/title_activity_display_provider_info" >
    </activity>
    <activity
        android:name="com.cs442.project.team13.DisplayUserBookListActivity"
        android:label="@string/title_activity_display_user_book_list" >
    </activity>
    <activity
        android:name="com.cs442.project.team13.UpdateBookInfoActivity"
        android:label="@string/title_activity_update_book_info" >
    </activity>
    <activity
        android:name="com.cs442.project.team13.CategorySearch"
        android:label="@string/title_activity_category_search" >
    </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.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>

    <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.cs442.project.team13" />
        </intent-filter>
    </receiver>

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

我该如何解决这个问题?

【问题讨论】:

  • 您是否将所有内容都设置到清单中,例如接收器和服务?安装应该显示 gcm,所以这不是问题。
  • 您好,谢谢您的回复,是的,我在清单中设置了接收器和服务,但问题是某些安装了设备令牌的设备可以接收通知,但有些设备由于缺少设备令牌而无法接收,我不知道为什么。
  • 您可以编辑您的帖子并包含清单文件吗?
  • @IulianVărzaru 嗨,我编辑了我的帖子,如果有什么问题,请告诉我,非常感谢

标签: android parse-platform


【解决方案1】:

据我在您的清单中看到的,唯一的解决方案可能是删除

<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>

【讨论】:

  • 你好,谢谢你的回复,我把这部分去掉了,有趣的是,第一次运行的时候devicetoken是空的,需要从手机历史中删除,然后重新运行再次,然后显示设备令牌,为什么会这样?你有什么想法吗?
【解决方案2】:

记得添加以下代码行,以便您的 .json 文件正确运行

gradle:app

apply plugin: 'com.google.gms.google-services'

implementation 'com.google.firebase:firebase-core:17.5.0'
implementation 'com.google.firebase:firebase-messaging:20.2.4'

gradle:项目

classpath 'com.google.gms:google-services:4.3.3'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    相关资源
    最近更新 更多