Я достиг точки в разработке моего приложения, когда я хотел протестировать его на реальном устройстве (а не на эмуляторе). Хотя приложение еще не закончено, оно работает отлично, как и должно работать при работе на эмуляторе.
Итак, я создал APK для переноса на свое устройство и установил его. Однако все прошло хорошо, когда я нажимаю кнопку, которая запускает ParseQuery для построения массива, присоединяет его к ListView и отображает в AlertDialog, все, что я получаю (через 30-45 секунд), это тост, запрограммированный какобработчик ошибок с указанием «ошибка ввода-вывода» - это сообщение, полученное из ParseException.
Не уверен насчет требований к разрешению доступа в Интернет, касающихся ParseServers (в эмуляторе он работал нормально без разрешения доступа в Интернет), я попытался добавитьинтернет-разрешение на манифест и попытался еще раз ... это дало тот же результат.
Я пробовал отладку и выпуск сборок, а также подписанные и неподписанные APK-файлы с одинаковыми результатами. За исключением сборки без подписи, которую мой телефон не установил бы.
Я в растерянности с этим, поскольку я впервые протестировал приложение с использованием ParseServer, поэтому я спрашиваю всех вас, ребята, есть лилюбую помощь, которую вы можете оказать.
Дайте мне знать, если есть какие-то определенные сегменты кода, которые вам нужно просмотреть, и я опубликую их, но, как я уже сказал, в эмуляторе все работает нормально, поэтому я могу только предположить, что это потенциальнопроблема либо с тем, как я собираю apk, либо с развертыванием экземпляра ParseServer на AWS.
ооо, и я решил пока не использовать никакой вид аутентификации пользователя с этим приложением, поэтому я не будуНе обращайтесь к пользовательскому классу любым способом, и автоматический пользователь включен.
Запрошен код @Davi Macêdo - я не уверен, какую часть инициализации вы запрашиваете, поэтому я добавлю все области, которые, по моему мнению, связаны с настройкойРазбор для этого приложения -
.StarterApplication -
package com.app.letsplaydarts;
import android.app.Application;
import com.parse.Parse;
import com.parse.ParseACL;
import com.parse.ParseUser;
public class StarterApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// Enable Local Datastore.
Parse.enableLocalDatastore(this);
// Add your initialization code here
Parse.initialize(new Parse.Configuration.Builder(getApplicationContext())
.applicationId("9da08bc83....62b73e6ea")
.clientKey("a04b8e7866a9....67fc3dbebfbd")
.server("http://ipaddress/parse/")
.build()
);
ParseUser.enableAutomaticUser();
ParseACL defaultACL = new ParseACL();
defaultACL.setPublicReadAccess(true);
defaultACL.setPublicWriteAccess(true);
ParseACL.setDefaultACL(defaultACL, true);
}
}
адрес сервера не является общедоступным DNS, предоставленным AWS, яЭто ссылка, предоставленная файлом server.js, доступ к которому осуществляется через PuTTY после создания экземпляра. Единственный общедоступный DNS - это предоставленный для доступа к панели мониторинга ParseServer
Я использую бесплатный сервис t2.micro, предоставляемый AWS для размещенияBitnami ParseServer
Соответствующая секция Gradle проекта -
allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io" }
mavenCentral()
}
}
Соответствующая секция Gradle модуля -
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'com.parse.bolts:bolts-tasks:1.4.0'
implementation 'com.parse:parse-android:1.17.3'
}
Результаты консоли PuTTY работают curl http://ip/parse/ -v
bitnami@ip-:~$ curl http://ip/parse/ -v
* Trying ip...
* TCP_NODELAY set
* Connected to ip (ip) port 80 (#0)
> GET /parse/ HTTP/1.1
> Host: ip
> User-Agent: curl/7.53.1
> Accept: */*
>
< HTTP/1.1 403 Forbidden
< Date: Tue, 12 Nov 2019 13:24:03 GMT
< Server: Apache
< X-Frame-Options: SAMEORIGIN
< X-Powered-By: Express
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Methods: GET,PUT,POST,DELETE,OPTIONS
< Access-Control-Allow-Headers: X-Parse-Master-Key, X-Parse-REST-API-Key, X-Parse-Javascript-Key, X-Parse-Application-Id, X-Parse-Client-Version, X-Parse-Session-Token, X-Requested-With, X-Parse-Revocable-Session, Content-Type, Pragma, Cache-Control
< Access-Control-Expose-Headers: X-Parse-Job-Status-Id, X-Parse-Push-Status-Id
< Content-Length: 24
< Cache-Control: s-maxage=10
<
* Connection #0 to host ip left intact
{"error":"unauthorized"}bitnami@ip:~$
Мне удалось получить некоторую дополнительную информацию из ParseException, как показано ниже:
.getMessage() returns "I/o failure"
.getCode() returns "100" - Listed as a 'client-only' error
// ConnectionFailed 100 The connection to the Parse servers failed.
.getCause() returns "java.net.UnknownServiceException: CLEARTEXT communication to [ipaddress] not permitted by network security policy"
Звучит для меня, поскольку это может быть проблемой у моего оператора мобильной связи !? Кто-нибудь может это подтвердить?