問題解決了獲得未經授權的Android設備上保存解析安裝記錄時
注意,在index.js我解析配置不包含clientKey,但我的應用程序傳遞一個值clientKey。
下面是添加了clientKey的index.js的更新部分:
var api = new ParseServer({
databaseURI: databaseUri || 'mongodb://mymongodb,
cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
appId: process.env.APP_ID || 'myappid',
masterKey: process.env.MASTER_KEY || 'mymasterkey',
restAPIKey: process.env.REST_API_KEY || 'myrestapikey',
clientKey: 'myclientkey'
....
我做測試的時候被認爲是iOS版相對於努力創造新的安裝記錄的第二個錯誤 - 我是不正確的,它不工作......我相信已經測試了一個升級流程,並且應用程序的舊Parse版本創建了安裝記錄,從而使新的分析服務器版本能夠將推送發送到iOS。但是,Android不能以這種方式工作,因爲安裝記錄需要SenderID,因此Android的分析服務器版本在升級後無法工作(如iOS)。
原題低於
我已經照着所有的遷移說明從解析切換到解析服務器。 Parse-server對iOS工作正常。
對於Android,我是有時候在嘗試保存解析安裝時未經授權。我會一直在特定設備上未經授權,直到它工作一次。
一旦安裝記錄保存成功,保存安裝記錄的所有後續調用似乎都可以工作。
下面是相關的Android代碼:
String parseAppId = getString(R.string.parse_app_id);
String parseClientKey = getString(R.string.parse_client_key);
String parseServer = getString(R.string.parse_server);
Parse.initialize(new Parse.Configuration.Builder(this)
.applicationId(parseAppId)
.clientKey(parseClientKey)
.server(parseServer)
.build()
);
ParseInstallation parseInstallation = ParseInstallation.getCurrentInstallation();
parseInstallation.saveEventually(new SaveCallback() {
@Override
public void done(ParseException e) {
// e = com.parse.ParseRequest$ParseRequestException: unauthorized
}
}
下面是index.js我的服務器配置(實際值刪節):
var api = new ParseServer({
databaseURI: databaseUri || 'mongodb://mymongodb,
cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
appId: process.env.APP_ID || 'myappid',
masterKey: process.env.MASTER_KEY || 'mymasterkey',
restAPIKey: process.env.REST_API_KEY || 'myrestapikey',
serverURL: process.env.SERVER_URL || 'https://my.server.com/parse',
liveQuery: {
classNames: ["Posts", "Comments"] // List of classes to support for query subscriptions
},
push: {
android: {
senderId: 'mysenderid',
apiKey: 'myapikey'
},
ios: {
pfx: __dirname + '/certs/myp12file.p12',
bundleId: 'my.bundle.id',
production: true
}
},
verbose: true
});
我已經驗證和重新驗證一萬次AppId,ClientKey和Server設置......它們與我在index.js文件中的解析配置中所具有的完全相同,並且iOS和Android值完全相同(複製和粘貼),除了Android有額外在服務器URL末尾添加斜槓「/」(如設置文檔和ot中所述)她的SO問題)。
一個類似的問題,我發現了這樣一條:https://github.com/ParsePlatform/parse-server/issues/635
但因爲我的AppId相匹配,不能導致發生了什麼。
該網站指出,當將APPID更新,它可以導致403的響應,因爲解析緩存舊的AppId和ClientKey值:
http://androidetc.com/android/tutorial_parse_server_android_heroku_mongodb/
但是,客戶端密鑰和的AppId來自解析不變。另外,我現在也用新的模擬器來獲得這個。
我之前也使用'saveInBackground'而不是'saveEventually',並且看到一條說明未經授權的錯誤可能會被它修復。
我使用解析當前Android SDK中:(從我的build.gradle)
compile 'com.parse:parse-android:1.13.1'
我也有兩個仿真器是能夠節省使用相同的代碼運行時,解析安裝,但如果我嘗試保存任何其他值,則失敗(我將附加值分隔成一個單獨的調用,我在第一次安裝保存嘗試後執行 - 我想看看如果我嘗試使用或不使用保存額外的價值...和一些設備,它呢?):
parseInstallation.put("email", email);
parseInstallation.put("userID", userID);
parseInstallation.put("campusID", campusID);
parseInstallation.put("GCMSenderId", "...senderid...");
(是的,我知道,我應該存儲這些值在另一個表 - TBD更高版本)
... 刪除從戰後初期
這個問題是用戶特定的還是一般的?像所有用戶都遇到此安裝問題一樣,還是似乎多少有一次? – DevKyle
Android應用程序尚未發佈,並且我恰好使用相同的帳戶進行了測試。保存parseInstallation的初始調用不包含任何帳戶信息 - 只是爲設備註冊安裝記錄,並且已經使用多個設備進行了測試。 – m0bl