You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

108 lines
3.9 KiB

// Copyright (c) 2016-present, Facebook, Inc. All rights reserved.
//
// You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
// copy, modify, and distribute this software in source code or binary form for use
// in connection with the web services and APIs provided by Facebook.
//
// As with any software that integrates with the Facebook platform, your use of
// this software is subject to the Facebook Developer Principles and Policies
// [http://developers.facebook.com/policy/]. This copyright notice shall be
// included in all copies or substantial portions of the software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
import FBSDKShareKit
/**
A model for a game request.
*/
public struct GameRequest {
/**
Used when defining additional context about the nature of the request.
*/
public var actionType: ActionType?
/**
Additional freeform data you may pass for tracking. This will be stored as part of the request objects created.
Maximum length is 255 characters.
*/
public var data: String?
/**
This controls the set of friends someone sees if a multi-friend selector is shown.
It is `.Default` by default, meaning that all friends can be shown.
If specified as `HideUsers`, only friends who don't use the app will be shown.
If specified as `HideNonUsers`, only friends who do use the app will be shown.
*/
public var recipientsFilter: RecipientsFilter
/**
A plain-text message to be sent as part of the request.
This text will surface in the App Center view of the request, but not on the notification jewel.
*/
public var message: String
/// The title for the dialog.
public var title: String
/**
A set of user IDs, usernames or invite tokens of people to send the request to.
These may or may not be a friend of the sender. If this is specified by the app, the sender will not have a choice
of recipients. If not, the sender will see a multi-friend selector.
*/
public var recipients: Set<Recipient>?
/**
An array of user IDs that will be included in the dialog as the first suggested friends.
*/
public var recipientSuggestions: Set<Recipient>?
/**
Create a new game request content with a title and a message.
- parameter title: The title for the dialog.
- parameter message: The message to be sent as part of the request.
*/
public init(title: String, message: String) {
self.title = title
self.message = message
self.recipientsFilter = .none
}
}
extension GameRequest: Equatable {
/**
Compare two `GameRequest`s for equality.
- parameter lhs: The first request to compare.
- parameter rhs: The second request to compare.
- returns: Whether or not the requests are equal.
*/
public static func == (lhs: GameRequest, rhs: GameRequest) -> Bool {
return lhs.sdkContentRepresentation == rhs.sdkContentRepresentation
}
}
extension GameRequest {
internal var sdkContentRepresentation: FBSDKGameRequestContent {
let sdkContent = FBSDKGameRequestContent()
let sdkActionRepresentation = actionType?.sdkActionRepresentation ?? (.none, nil)
sdkContent.actionType = sdkActionRepresentation.0
sdkContent.objectID = sdkActionRepresentation.1
sdkContent.data = data
sdkContent.filters = recipientsFilter.sdkFilterRepresentation
sdkContent.title = title
sdkContent.message = message
sdkContent.recipients = recipients?.map { $0.rawValue }
sdkContent.recipientSuggestions = recipientSuggestions?.map { $0.rawValue }
return sdkContent
}
}