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

Posted

技术标签:

【中文标题】如何使用 Parse.com 推送通知服务在 Android 应用程序中推送 URL?【英文标题】:How to Push a Url in Android app using Parse.com Push notification Service? 【发布时间】:2015-05-18 14:23:54 【问题描述】:

我可以推送简单的推送通知,但无法推送 URL 以在浏览器中打开它。

我在网上看过很少的教程,他们建议创建自定义 JSON 接收器类。谁能告诉我该怎么做?

MainActivity.java

 package com.example.pushnotificationdemo;



import com.example.pushnotificationdemo.R;
import com.parse.ParseAnalytics;
import com.parse.ParseInstallation;
import com.parse.PushService;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends ActionBarActivity 

    WebView webframe;



    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);



        setContentView(R.layout.activity_main);

        ParseAnalytics.trackAppOpenedInBackground(getIntent());

        PushService.setDefaultPushCallback(this, MainActivity.class);
        ParseInstallation.getCurrentInstallation().saveInBackground();



        /** Cerco l'elemento in /res/layout/main.xml */
        webframe = (WebView) findViewById(R.id.webview);

        /** javascript abilitato (ma non flash) */
        webframe.getSettings().setJavaScriptEnabled(true);



        /** Simulo il webbrowser chrome di android*/
        webframe.setWebChromeClient(new WebChromeClient()); 
        webframe.setWebViewClient(new WebViewClient()); 

        /** Assegno l'url di apertura del webframe */
        webframe.loadUrl("http://www.daiugs.com");






    

ParseApp.java

package com.example.pushnotificationdemo;

import com.parse.Parse;
import com.parse.ParseACL;
import com.parse.ParseUser;

import android.app.Application;

public class ParseApp extends Application

    @Override
    public void onCreate() 
        super.onCreate();

        Parse.initialize(this, "Ym4IsX0r5dGLxa8RDtj....",
                "s9DpBvn8HI0Uu......");

        ParseUser.enableAutomaticUser();
        ParseACL defaultACL = new ParseACL();

        defaultACL.setPublicReadAccess(true);

        ParseACL.setDefaultACL(defaultACL, true);
    


AndroidManifest.xml

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

    <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.SYSTEM_ALERT_WINDOW"/>


    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />

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

       <activity android:name="com.example.pushnotificationdemo.SplashActivity"
                  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>

       <activity android:name="com.example.pushnotificationdemo.MainActivity"
                  android:label="@string/app_name"

                  >




            </activity>

        <service android:name="com.parse.PushService"></service>

                <receiver android:name="com.example.pushnotificationdemo.MyCustomReceiver" android:exported="false">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.USER_PRESENT" />
            <action android:name="your.package.name.UPDATE_STATUS" />
        </intent-filter>
    </receiver>



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

    </application>

</manifest>

【问题讨论】:

【参考方案1】:

推送时发送

data: 
    alert: "Android Push Gets Major Refresh",
    url: "http://blog.parse.com",
  

并将其添加到您的 mainActivity 中

Intent intent = getIntent();
Bundle extras = intent.getExtras();
String jsonData = extras.getString("com.parse.Data");
JSONObject json = new JSONObject(jsonData);
String pushStore = json.getString("url");
if(pushStore!=null) 
    Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(pushStore));
  startActivity(browserIntent);
 

【讨论】:

不工作!错误“字符串类型的方法 getString(String) 未定义”

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

推送通知在 iphone 中没有收到来自 Parse.com 服务器的某些时间

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

推送通知停止在parse.com android项目中工作

尝试使用 Parse.com 获取推送通知无法在设备上运行

Parse.com 在 Xamarin 中推送 Android

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