FBUnitySDKDelegate.m 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. // Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
  2. //
  3. // You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
  4. // copy, modify, and distribute this software in source code or binary form for use
  5. // in connection with the web services and APIs provided by Facebook.
  6. //
  7. // As with any software that integrates with the Facebook platform, your use of
  8. // this software is subject to the Facebook Developer Principles and Policies
  9. // [http://developers.facebook.com/policy/]. This copyright notice shall be
  10. // included in all copies or substantial portions of the software.
  11. //
  12. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  13. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
  14. // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
  15. // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
  16. // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  17. // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  18. #import <FBSDKCoreKit/FBSDKCoreKit.h>
  19. #import "FBUnitySDKDelegate.h"
  20. #import "FBUnityUtility.h"
  21. NSString *const FBUnityMessageName_OnAppRequestsComplete = @"OnAppRequestsComplete";
  22. NSString *const FBUnityMessageName_OnGetAppLinkComplete = @"OnGetAppLinkComplete";
  23. NSString *const FBUnityMessageName_OnFriendFinderComplete = @"OnFriendFinderComplete";
  24. NSString *const FBUnityMessageName_OnGroupCreateComplete = @"OnGroupCreateComplete";
  25. NSString *const FBUnityMessageName_OnGroupJoinComplete = @"OnGroupJoinComplete";
  26. NSString *const FBUnityMessageName_OnInitComplete = @"OnInitComplete";
  27. NSString *const FBUnityMessageName_OnLoginComplete = @"OnLoginComplete";
  28. NSString *const FBUnityMessageName_OnLogoutComplete = @"OnLogoutComplete";
  29. NSString *const FBUnityMessageName_OnShareLinkComplete = @"OnShareLinkComplete";
  30. NSString *const FBUnityMessageName_OnFetchDeferredAppLinkComplete = @"OnFetchDeferredAppLinkComplete";
  31. NSString *const FBUnityMessageName_OnRefreshCurrentAccessTokenComplete = @"OnRefreshCurrentAccessTokenComplete";
  32. NSString *const FBUnityMessageName_OnRefreshLimitedLoginComplete = @"OnRefreshLimitedLoginComplete";
  33. NSString *const FBUnityMessageName_OnUploadImageToMediaLibraryComplete = @"OnUploadImageToMediaLibraryComplete";
  34. NSString *const FBUnityMessageName_OnUploadVideoToMediaLibraryComplete = @"OnUploadVideoToMediaLibraryComplete";
  35. NSString *const FBUnityMessageName_OnCreateGamingContextComplete = @"OnCreateGamingContextComplete";
  36. NSString *const FBUnityMessageName_OnSwitchGamingContextComplete = @"OnSwitchGamingContextComplete";
  37. NSString *const FBUnityMessageName_OnChooseGamingContextComplete = @"OnChooseGamingContextComplete";
  38. NSString *const FBUnityMessageName_OnGetCurrentGamingContextComplete = @"OnGetCurrentGamingContextComplete";
  39. NSString *const FBUnityMessageName_OnGetTournamentsComplete = @"OnGetTournamentsComplete";
  40. NSString *const FBUnityMessageName_OnUpdateTournamentComplete = @"OnUpdateTournamentComplete";
  41. NSString *const FBUnityMessageName_OnTournamentDialogSuccess = @"OnTournamentDialogSuccess";
  42. NSString *const FBUnityMessageName_OnTournamentDialogCancel = @"OnTournamentDialogCancel";
  43. NSString *const FBUnityMessageName_OnTournamentDialogError = @"OnTournamentDialogError";
  44. static NSMutableArray *g_instances;
  45. @implementation FBUnitySDKDelegate {
  46. int _requestID;
  47. }
  48. + (void)initialize
  49. {
  50. if (self == [FBUnitySDKDelegate class]) {
  51. g_instances = [NSMutableArray array];
  52. }
  53. }
  54. + (instancetype)instanceWithRequestID:(int)requestID
  55. {
  56. FBUnitySDKDelegate *instance = [[FBUnitySDKDelegate alloc] init];
  57. instance->_requestID = requestID;
  58. [g_instances addObject:instance];
  59. return instance;
  60. }
  61. #pragma mark - Private helpers
  62. - (void)complete
  63. {
  64. [g_instances removeObject:self];
  65. }
  66. #pragma mark - GameRequestDelegate
  67. - (void)gameRequestDialog:(FBSDKGameRequestDialog *)gameRequestDialog didCompleteWithResults:(NSDictionary *)results
  68. {
  69. [FBUnityUtility sendMessageToUnity:FBUnityMessageName_OnAppRequestsComplete userData:results requestId:_requestID];
  70. [self complete];
  71. }
  72. - (void)gameRequestDialog:(FBSDKGameRequestDialog *)gameRequestDialog didFailWithError:(NSError *)error
  73. {
  74. [FBUnityUtility sendErrorToUnity:FBUnityMessageName_OnAppRequestsComplete error:error requestId:_requestID];
  75. [self complete];
  76. }
  77. - (void)gameRequestDialogDidCancel:(FBSDKGameRequestDialog *)gameRequestDialog
  78. {
  79. [FBUnityUtility sendCancelToUnity:FBUnityMessageName_OnAppRequestsComplete requestId:_requestID];
  80. [self complete];
  81. }
  82. #pragma mark - FBSDKSharingDelegate
  83. - (void)sharer:(id<FBSDKSharing>)sharer didCompleteWithResults:(NSDictionary *)results
  84. {
  85. if (results.count == 0) {
  86. // We no longer always send back a postId. In cases where the response is empty,
  87. // stuff in a didComplete so that Unity doesn't treat it as a malformed response.
  88. results = @{ @"didComplete" : @"1" };
  89. }
  90. [FBUnityUtility sendMessageToUnity:FBUnityMessageName_OnShareLinkComplete userData:results requestId:_requestID];
  91. [self complete];
  92. }
  93. - (void)sharer:(id<FBSDKSharing>)sharer didFailWithError:(NSError *)error
  94. {
  95. [FBUnityUtility sendErrorToUnity:FBUnityMessageName_OnShareLinkComplete error:error requestId:_requestID];
  96. [self complete];
  97. }
  98. - (void)sharerDidCancel:(id<FBSDKSharing>)sharer
  99. {
  100. [FBUnityUtility sendCancelToUnity:FBUnityMessageName_OnShareLinkComplete requestId:_requestID];
  101. [self complete];
  102. }
  103. #pragma mark - FBSDKContextDialogDelegate
  104. - (void)contextDialogDidComplete:(NSObject<FBSDKContextDialogDelegate>*)contextDialog;
  105. {
  106. if ([contextDialog isKindOfClass:[FBSDKChooseContextDialog class]]) {
  107. [FBUnityUtility sendMessageToUnity: FBUnityMessageName_OnChooseGamingContextComplete userData: NULL requestId:_requestID];
  108. } else if ([contextDialog isKindOfClass:[FBSDKSwitchContextDialog class]]) {
  109. [FBUnityUtility sendMessageToUnity: FBUnityMessageName_OnSwitchGamingContextComplete userData: NULL requestId:_requestID];
  110. } else if ([contextDialog isKindOfClass:[FBSDKCreateContextDialog class]]) {
  111. [FBUnityUtility sendMessageToUnity: FBUnityMessageName_OnCreateGamingContextComplete userData: NULL requestId:_requestID];
  112. }
  113. [self complete];
  114. }
  115. - (void)contextDialog:(NSObject<FBSDKContextDialogDelegate>*)contextDialog didFailWithError:(NSError *)error
  116. {
  117. if ([contextDialog isKindOfClass:[FBSDKChooseContextDialog class]]) {
  118. [FBUnityUtility sendErrorToUnity:FBUnityMessageName_OnChooseGamingContextComplete error:error requestId:_requestID];
  119. } else if ([contextDialog isKindOfClass:[FBSDKSwitchContextDialog class]]) {
  120. [FBUnityUtility sendErrorToUnity:FBUnityMessageName_OnSwitchGamingContextComplete error:error requestId:_requestID];
  121. } else if ([contextDialog isKindOfClass:[FBSDKCreateContextDialog class]]) {
  122. [FBUnityUtility sendErrorToUnity:FBUnityMessageName_OnCreateGamingContextComplete error:error requestId:_requestID];
  123. }
  124. [self complete];
  125. }
  126. - (void)contextDialogDidCancel:(NSObject<FBSDKContextDialogDelegate>*)contextDialog
  127. {
  128. if ([contextDialog isKindOfClass:[FBSDKChooseContextDialog class]]) {
  129. [FBUnityUtility sendCancelToUnity:FBUnityMessageName_OnChooseGamingContextComplete requestId:_requestID];
  130. } else if ([contextDialog isKindOfClass:[FBSDKSwitchContextDialog class]]) {
  131. [FBUnityUtility sendCancelToUnity:FBUnityMessageName_OnSwitchGamingContextComplete requestId:_requestID];
  132. } else if ([contextDialog isKindOfClass:[FBSDKCreateContextDialog class]]) {
  133. [FBUnityUtility sendCancelToUnity:FBUnityMessageName_OnCreateGamingContextComplete requestId:_requestID];
  134. }
  135. [self complete];
  136. }
  137. #pragma mark - FBSDKShareTournamentDialogDelegate
  138. - (void)didCancelWithDialog:(FBSDKShareTournamentDialog * _Nonnull)dialog {
  139. [FBUnityUtility sendCancelToUnity:FBUnityMessageName_OnTournamentDialogCancel requestId:_requestID];
  140. }
  141. - (void)didCompleteWithDialog:(FBSDKShareTournamentDialog * _Nonnull)dialog tournament:(FBSDKTournament * _Nonnull)tournament {
  142. [FBUnityUtility sendMessageToUnity: FBUnityMessageName_OnTournamentDialogSuccess userData: [tournament toDictionary] requestId:_requestID];
  143. }
  144. - (void)didFailWithError:(NSError * _Nonnull)error dialog:(FBSDKShareTournamentDialog * _Nonnull)dialog {
  145. [FBUnityUtility sendErrorToUnity:FBUnityMessageName_OnTournamentDialogError error:error requestId:_requestID];
  146. }
  147. @end