解析安装表中更新devicetoken的错误

时间:2015-10-23 01:05:48

标签: android parse-platform

我正在尝试更新deviceToken parse表的Installation。我通过rest api用于android。但每当我通过以下代码更新我的devicetoken

ParseInstallation installation = ParseInstallation.getCurrentInstallation();
LinkedList<String> channels = new LinkedList<String>();     
channels.add("Giants");    
installation.put("channels",channels);     
installation.put("GCMSenderId","56698194487");     
installation.put("deviceToken","abcd");    
installation.saveInBackground();   

我收到了以下错误

  

引起:java.lang.IllegalArgumentException:无法修改   _Installation对象的deviceToken属性。

我尝试删除sessioninstallation表,但没有任何人可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

如果您仍想更新 deviceToken ,则可以使用&#34; com.google.android.c2dm.intent.REGISTRATION&#34;广播意图到您的应用程序并解析android(从1.15.7 com.parse.GcmRegistrar.java)选择它并更新deviceToken。

当FCM和解析服务器(从2.3.8开始)仍然在寻找deviceToken id来发送FCM通知时,这非常有用。

            Intent i = new Intent();
            i.setAction("com.google.android.c2dm.intent.REGISTRATION");
            i.putExtra("registration_id", FirebaseInstanceId.getInstance().getToken());
            sendBroadcast(i);

除了com.google.firebase.MESSAGING_EVENT和INSTANCE_ID_EVENT意图过滤器之外,请确保在Android清单中有此功能

    <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>
    <service android:name="com.parse.PushService" />
    <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.my.package" />
        </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>

答案 1 :(得分:0)

deviceToken中{p> read only字段为Installation,因此您无法修改或更新它们。

Parse.com android docs

  

deviceToken:GCM用于跟踪注册ID的令牌。   在iOS设备上,这是Apple生成的令牌(只读)。

答案 2 :(得分:0)

如果有人还面临同样的问题。请在这里找到解决方案。

link:https://drive.google.com/drive/folders/0B04Quls_ltDDNnVrRE55Yk9sb2M?usp=sharing

  1. 提取附件并将​​其作为模块添加到项目中。

  2. 在settings.gradle中提及此模块文件。

  3. 在build.gradle的app moduel中添加此语句,如

  4. //compile 'com.parse.bolts:bolts-tasks:1.3.0'   //Comment it if available
    compile project(':Parse-release')   //Use this one.
    
    1. 清理构建并构建一次。
    2. 注意:我希望这个自定义库可以帮助你更新deviceToken,因为在这个库中,deviceToken是可编辑的,其余的都是一样的。