“友達発見(Find Your Friends)” 機能では、ユーザーはアドレス帳をアップロードして、アプリでDigits機能を使っている知り合いのユーザーを探すことができます。
“友達発見(Find Your Friends)”機能はDGTContacts
クラスを通じて使用できますアクセスできます。
Provide the initializer with a user session of the type DGTSession
, which can be obtained from the Digits shared instance [Digits sharedInstance].session
.
“友達発見(Find Your Friends)”を開始するには、プロセスでstartContactsUploadWith...
メソッドを実行します。外観やタイトル、表示するビューコントローラーのようなプロパティを上書きすることもできます。
// Objective-C DGTSession *userSession = [Digits sharedInstance].session; DGTContacts *contacts = [[DGTContacts alloc] initWithUserSession:userSession]; [contacts startContactsUploadWithCompletion:^(DGTContactsUploadResult *result, NSError *error) { // resultsオブジェクトとerror オブジェクトを調べ、アップロードが成功したかどうかを判別します。 }];
// Swift let userSession = Digits.sharedInstance().session; let contacts = DGTContacts(userSession: userSession); contacts.startContactsUpload() { result, error in // resultsオブジェクトとerror オブジェクトを調べ、アップロードが成功したかどうかを判別します。 }
startContactsUploadWith...
を初めて実行した時、ユーザーのアドレス帳をアップロードする許可を求めるダイアログが表示されます。
ユーザーが“OK”をタップした場合はシステムによってアドレス帳へのアクセス許可がプロンプト表示され、ユーザーが許可するとバックグラウンドでアドレス帳がアップロードされ、modal UIは即座に終了します。
ユーザーが“Not now”をタップした場合、modal UI は終了してDigits 機能はコールバック関数のerror 引数にDGTErrorCodeUserCanceledFindContacts
を渡します。
ユーザーが“OK”をタップしたがその後アプリがアドレス帳にアクセスするのを承認しなかった場合、modal UI は終了してDigits 機能はコールバック関数のerror 引数にDGTErrorCodeUserDeniedAddressBookAccess
を渡します。
注意:
アドレス帳へのアクセスをユーザーが既に承認か拒否かした場合、以降は
startContactsUploadWith...
を実行してもmodal UIは表示されません。 ユーザーが “Not now”をタップすると、 modal UIが再び表示されます。-[DGTContacts contactsAccessAuthorizationStatus]
を実行して modal UI を表示するかどうか決めてください。
アドレス帳のアップロードが完了すると、設定していたコールバック関数がDGTContactsUploadResult
オブジェクトや発生したエラーを渡されて実行されます。
DGTContactsUploadResult
オブジェクトは、 いくつの連絡先がアップロードされたかを表すtotalContacts
と実際にいくつのアップロードが成功したかを表すnumberOfUploadedContacts
をプロパティとして持っています。
アップロードが失敗した場合、DGTContactsUploadResult
オブジェクトはnil
になるので注意してください。
ユーザーがアドレス帳をアップロードすると、 Digits機能では lookupContactMatchesWithCursor:completion:
を実行してアドレス帳に合致する他のDigitsユーザーを探せるようになります。 Matches will return the Digits userID’s of users of your app that the authenticated user knows and any other users of your app that may know your user.
任意に設定できる cursor 引数は、検索合致結果に対する前回リクエストからのオフセットとして使用できます。例えば、 if after the first request the nextCursor
in the callback is not nil and 100 matches were found, pass the given nextCursor
to a second call of this method to retrieve the second 100 matches (if any).
// Objective-C DGTSession *userSession = [Digits sharedInstance].session; DGTContacts *contacts = [[DGTContacts alloc] initWithUserSession:userSession]; [contacts lookupContactMatchesWithCursor:nil completion:^(NSArray *matches, NSString *nextCursor, NSError *error) { // 検索合致結果はDGTUser オブジェクトの配列になります // follow-up の実行時にnextCursor を使っていた場合、このメソッドでは検索合致結果をオフセットします。 }];
// Swift let userSession = Digits.sharedInstance().session; let contacts = DGTContacts(userSession: userSession); contacts.lookupContactMatches(cursor:nil) { matches, nextCursor, error in // 検索合致結果はDGTUser オブジェクトの配列になります // follow-up の実行時にnextCursor を使っていた場合、このメソッドでは検索合致結果をオフセットします。 }
ユーザーがアップロードした連絡先は全て、deleteAllUploadedContactsWithCompletion
を実行することでDigitsから削除できます。
注意:
ユーザーの連絡先を削除した後でも、まだlookupContactMatchesWithCursor:completionの検索合致結果に残っている場合があります。 これは 逆引き(reverse lookup) が原因です。- 他のDigits ユーザーのアドレス帳の中にこのユーザーの電話番号が入っていると、検索合致結果の中に残り続けます。
// Objective-C DGTSession *userSession = [Digits sharedInstance].session; DGTContacts *contacts = [[DGTContacts alloc] initWithUserSession:userSession]; [contacts deleteAllUploadedContactsWithCompletion:^(NSError *error) { // errorオブジェクトを調べて削除が成功したかどうか判別する }];
// Swift let userSession = Digits.sharedInstance().session; let contacts = DGTContacts(userSession: userSession); contacts.deleteAllUploadedContacts() { error in // errorオブジェクトを調べて削除が成功したかどうか判別する }