2017-01-30 34 views
3

問題解決了獲得未經授權的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更高版本)

... 刪除從戰後初期

+0

這個問題是用戶特定的還是一般的?像所有用戶都遇到此安裝問題一樣,還是似乎多少有一次? – DevKyle

+0

Android應用程序尚未發佈,並且我恰好使用相同的帳戶進行了測試。保存parseInstallation的初始調用不包含任何帳戶信息 - 只是爲設備註冊安裝記錄,並且已經使用多個設備進行了測試。 – m0bl

回答

0

注意,在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版相對於努力創造新的安裝記錄的第二個錯誤 - 我是不正確的,它是而不是工作......我相信已經測試了iOS的升級流程,並且應用的舊Parse版本創建了安裝記錄,從而使新的分析服務器版本能夠發送推送到iOS。但是,Android不能以這種方式工作,因爲安裝記錄需要SenderID,因此Android的分析服務器版本在升級後無法工作(如iOS)。

相關問題