Push-код городского дирижабля - PullRequest
1 голос
/ 29 января 2012

Я следовал инструкциям по UA, получил свой APID и успешно получил тестовое push-сообщение на моем устройстве Android.

Теперь следующее, что я хотел бы сделать, - настроить таргетинг на мое устройство с помощью JAVA и отправить push-сообщения. Из того, что я видел до сих пор, лучший способ добиться этого - использовать их веб-API.

Однако, когда я пытаюсь отправить сообщение, я всегда получаю следующую ошибку:

java.io.IOException: сервер вернул код ответа HTTP: 401 для URL: https://go.urbanairship.com/api/push/ на sun.net.www.protocol.http.HttpURLConnection.getInputStream (неизвестный источник) на sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream (неизвестный источник) на com.Sender.Sender.main (Sender.java:56)

Это код, который я использую:

package com.Sender;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Authenticator;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class Sender {

/**
 * @param args
 */
public static void main(String[] args) {
    try {
        String responseString = "";
        String outputString = "";
        String username = "MWMoRVhmRXOG6IrvhMm-BA";
        String password = "ebsJS2iXR5aMJcOKe4rCcA";

        MyAuthenticator ma= new MyAuthenticator(username, password);

        Authenticator.setDefault(ma);

        URL url = new URL("https://go.urbanairship.com/api/push/");
        URLConnection urlConnection = url.openConnection();
        HttpURLConnection httpConn = (HttpURLConnection) urlConnection;
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        String APID = "23eef280-19c8-40fc-b798-788f50e255a2";

        String postdata = "{\"android\": {\"alert\": \"Hello from JAVA!\"}, \"apids\": [\""+APID+"\"]}";
        byte[] buffer = new byte[postdata.length()];
        buffer = postdata.getBytes("UTF8");

        bout.write(buffer);
        byte[] b = bout.toByteArray();
        httpConn.setRequestProperty("Content-Length",
                String.valueOf(b.length));

        httpConn.setRequestProperty("Content-Type", "application/json");
        httpConn.setRequestMethod("POST");

        httpConn.setDoOutput(true);
        httpConn.setDoInput(true);

        OutputStream out = httpConn.getOutputStream();
        out.write(b);
        out.close();

        InputStreamReader isr = new InputStreamReader(
                httpConn.getInputStream());
        BufferedReader in = new BufferedReader(isr);

        while ((responseString = in.readLine()) != null) {
            outputString = outputString + responseString;
        }
        System.out.println(outputString);

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
}

}

Можете ли вы помочь мне, пожалуйста?

1 Ответ

0 голосов
/ 29 января 2012

HTTP 401 представляет Несанкционированный доступ.В вашем коде, даже если вы создали Authenticator, вы не предоставили его как часть заголовка запроса.Вот руководство по установке аутентификатора для соединения URLC.

...