2013-04-26 6 views
5

私はparse.comを私のアプリケーションのバックエンドとして使用しています。ユーザーは彼のFacebookやTwitterアカウントでログインすることができます。また、twitter/facebookを彼の既存のアカウントにリンクする機能もあります。彼のfacebookアカウントの新しいPFUserを介してユーザのログインがクラウド上で作成されている場合はParse.com PFUser twitterとfacebookアカウントをリンクしていますか?

:ここ

が問題です。 同じユーザーが再びアカウントにログインすると、別の PFUserがクラウド上に作成されます。 facebookアカウントと twitterアカウントをリンクさせる場合、 parse.comは「このTwitterアカウントは既に別のユーザーに接続しています」と返信します。

PFUsersを2つマージするにはどうすればよいですか?誰でも私にこの問題を解決するアプローチを提案できますか?

+0

https://parse.com/questions/merging-pfusers –

+0

ここで示唆されている方法では、デバイスごとに1人のユーザーしか使用できません。私はそれを望んでいない。他の提案はありますか? – Ashwani

答えて

3

残念ながら、複数のPFUserにリンクされているFacebookやTwitterのアカウントを持ってすることはできないようです。さらに、2つ以上のPFUserエントリをマージすることはできないようです - Parse's answer hereを参照してください。

代わりに、PFUserテーブルのデータを認証目的で厳密に保持し、残りのデータを新しい専用のParseクラス(たとえば、userData、PFUserエントリが指す)に保存します。

この意味で、同じuserDataエントリを指す複数のPFUserエントリを使用することができます。したがって、Parseバックエンドの特定のTwitterアカウントにリンクされている既存のPFUserエントリがある場合は、その特定のPFUserにユーザーログインを行い、そのエントリを以前の既存のuserDataエントリにポイントするのが最善です。

4

コードを一切見ずに、TwitterアカウントをリンクしようとしたときにPFTwitterUtils logInWithBlockと呼んでいるようです。これは、facebookでサインインすることによって作成された既存のPFUserを使用する代わりに、新しいPFUserを作成するだけなので、間違ったアプローチになります。

代わりに、PFTwitterUtilsメソッドを使用して、現在のPFUserをTwitterアカウントにリンクしてください。 The Parse documentationはそれを行う次のコードを示しています。

PFUser *user = [PFUser currentUser]; 
if (![PFTwitterUtils isLinkedWithUser:user]) { 
    [PFTwitterUtils linkUser:user block:^(BOOL succeeded, NSError *error) { 
     if ([PFTwitterUtils isLinkedWithUser:user]) { 
      NSLog(@"Woohoo, user logged in with Twitter!"); 
     } 
    }]; 
} 
+0

申し訳ありませんが、ここで間違っています。既にあなたが投稿したのと同じコードを使用しています。 twitterアカウント(以前に別のPFUserに接続されている)を現在のアカウントにリンクしようとすると問題が発生します。このtwitterアカウントがすでに他のユーザーに接続されているというエラーが表示されます。これをどうすれば解決できますか? – Ashwani

4

あなたはある一つのことを行うことができます

あなたは、時間のある時点で、ユーザーのリンクを解除する必要があり、他の任意のFacebookの/ Twitterのアカウントを持つ現在のユーザーにリンク

。ログアウトすると、現在のユーザーがFacebook/Twitterにリンクしているかどうかを確認する必要があるとします。現在のユーザーが他のユーザーのいずれかにリンクされている場合

あなたは再びFacebookのユーザーのために、この

と同様に、他のユーザとのFacebook/Twitterユーザーをリンクできるようにリンクを解除する必要があります。

if([PFFacebookUtils isLinkedWithUser:[PFUser currentUser]]){ 

       [PFFacebookUtils unlinkUserInBackground:[PFUser currentUser] block:^(BOOL Success,NSError *unlinkError){ 
        if(!unlinkError){ 
         // User unlinked 
        }else{ 
         // Erro while unlink user 
        } 
       }]; 
      } 
Twitterユーザーのために

if([PFTwitterUtils isLinkedWithUser:[PFUser currentUser]]){ 

       [PFTwitterUtils unlinkUserInBackground:[PFUser currentUser] block:^(BOOL Success,NSError *unlinkError){ 
        if(!unlinkError){ 
         // unlink user 
        }else{ 
         // Error while unlink 
        } 
}]; 
} 
関連する問題