2015-10-10 57 views
1

我想在使用iOS解析時更新安裝表中的設備令牌。 要保存設備令牌我所做的:在解析ios中更新安裝表中的設備令牌

PFInstallation *currentInstallation = [PFInstallation currentInstallation]; 
[currentInstallation setDeviceTokenFromData:(NSData*)[AppHelper userDefaultsForKey:@"token"]]; 
[currentInstallation setObject:[PFUser currentUser].objectId forKey:@"user"]; 
NSArray *channels = [NSArray arrayWithObjects:@"AnyString",nil]; 
currentInstallation.channels=channels; 
[currentInstallation saveInBackground]; 

我想更新該設備令牌。我知道要更新令牌,我必須使用rest API,即https://api.parse.com/1/installations。如何更新行,因爲我也沒有安裝ID。

請提供正確的語法。

+0

你在哪裏寫這段代碼? –

+0

登錄時。在登錄視圖 –

+0

如果我從我的設備中刪除應用程序並再次安裝它,那麼應用程序將生成一個新的設備標記,這就是爲什麼有必要在解析中更新安裝表。 –

回答

1

在AppDelegate的doRegisterForRemoteNotificationsWithDeviceToken方法中編寫以下代碼。

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{ 
    PFInstallation *currnentInstallation = [PFInstallation currentInstallation]; 
    [currnentInstallation setDeviceTokenFromData:deviceToken]; 
    [currnentInstallation saveInBackground]; 
} 

對於註冊用戶在信道使用以下代碼在登錄屏幕

詳情,請參閱本鏈接https://www.parse.com/docs/ios/guide#push-notifications-installations

+0

但我必須保存userId,即用戶objectId。當我使用User objectId發送推送通知時,如下所示:PFQuery * pushQuery = [PFInstallation query]; [pushQuery whereKey:@「user」containedIn:objectIds]; PFPush * push = [[PFPush alloc] init]; [push setQuery:pushQuery]; [push setData:pushData]; [push sendPushInBackground]; –

+0

查看已更新的答案以在安裝tbl中保存userId。 –

+0

太好了。謝謝你(Y)。你節省了我的時間。否則,我正在考慮使用其他api來完成所有這些工作,例如首先獲取整個列表,然後刪除舊行並添加新行。非常感謝。 –

0

AppDelegate'sdidRegisterForRemoteNotificationsWithDeviceToken方法,設置deviceToken到安裝表和保存設備代幣至NSUserDefaults,如下所示:

PFInstallation *currentInstallation = [PFInstallation currentInstallation]; 
    [currentInstallation setDeviceTokenFromData:deviceToken]; 
    currentInstallation.channels = @[@"global"]; 
    [currentInstallation saveInBackground]; 
    [[NSUserDefaults standardUserDefaults]setObject:deviceToken forKey:@"deviceToken"]; 

並會在登錄或註冊,設置用戶是這樣的:

PFInstallation *currentInstallation = [PFInstallation currentInstallation]; 
[currentInstallation setObject:[PFUser currentUser] forKey:@"User"]; 
[currentInstallation setDeviceTokenFromData:[[NSUserDefaults standardUserDefaults] valueForKey:@"deviceToken"]]; 
currentInstallation.channels = @[@"global"]; 
[currentInstallation saveInBackground]; 

UPDATE:

你需要補充安裝表。將userID列添加到安裝中,然後使用當前用戶的userID獲取查詢安裝表。 你可以參考這個https://www.parse.com/questions/retrieve-objectid-from-installation-table鏈接,以便更好地理解
希望它有幫助:)

+0

這也將創建一個新的條目:(。我想更新現有的。如果安裝ID和設備令牌存在的用戶我想更新該行。如果不退出,然後創建一個新的 –

+0

你正在使用deviceToken進行推送通知上面的代碼在我的應用程序中沒有任何問題,無論如何,我已經更新了我的回答 –

+0

它也適用於我的方面。安裝表中不同的設備令牌 –