-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathFBPermissionRequest.m
More file actions
173 lines (136 loc) · 5.38 KB
/
FBPermissionRequest.m
File metadata and controls
173 lines (136 loc) · 5.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
//
// FBPermissionRequest.m
// Thumbprint
//
// Created by Blake Watters on 5/13/09.
// Copyright 2009 Two Toasters. All rights reserved.
//
#import "FBPermissionRequest.h"
@interface FBPermissionRequest (Private)
- (void)informDelegatePermissionWasGranted;
- (void)informDelegatePermissionWasDenied;
@end
@implementation FBPermissionRequest
@synthesize session = _session;
@synthesize permissionName = _permissionName;
@synthesize delegate = _delegate;
static NSString* kFacebookExtendedPermissionParamName = @"ext_perm";
static NSString* kFacebookCheckForPermissionApiCallName = @"facebook.Users.hasAppPermission";
static int kFacebookPermissionGranted = 1;
+ (FBPermissionRequest*)checkForPermission:(NSString*)permissionName withSession:(FBSession*)session delegate:(id)delegate {
FBPermissionRequest* permissionRequest = [[[FBPermissionRequest alloc] initWithSession:session] autorelease];
permissionRequest.delegate = delegate;
[permissionRequest checkForPermission:permissionName];
return permissionRequest;
}
+ (FBPermissionRequest*)checkForPermission:(NSString*)permissionName delegate:(id)delegate {
FBPermissionRequest* permissionRequest = [[[FBPermissionRequest alloc] init] autorelease];
permissionRequest.delegate = delegate;
[permissionRequest checkForPermission:permissionName];
return permissionRequest;
}
+ (FBPermissionRequest*)askForPermission:(NSString*)permissionName withSession:(FBSession*)session delegate:(id)delegate {
FBPermissionRequest* permissionRequest = [[[FBPermissionRequest alloc] initWithSession:session] autorelease];
permissionRequest.delegate = delegate;
[permissionRequest askForPermission:permissionName];
return permissionRequest;
}
+ (FBPermissionRequest*)askForPermission:(NSString*)permissionName delegate:(id)delegate {
FBPermissionRequest* permissionRequest = [[[FBPermissionRequest alloc] init] autorelease];
permissionRequest.delegate = delegate;
[permissionRequest askForPermission:permissionName];
return permissionRequest;
}
+ (FBPermissionRequest*)acquirePermission:(NSString*)permissionName withSession:(FBSession*)session delegate:(id)delegate {
FBPermissionRequest* permissionRequest = [[[FBPermissionRequest alloc] initWithSession:session] autorelease];
permissionRequest.delegate = delegate;
[permissionRequest acquirePermission:permissionName];
return permissionRequest;
}
+ (FBPermissionRequest*)acquirePermission:(NSString*)permissionName delegate:(id)delegate {
FBPermissionRequest* permissionRequest = [[[FBPermissionRequest alloc] init] autorelease];
permissionRequest.delegate = delegate;
[permissionRequest acquirePermission:permissionName];
return permissionRequest;
}
- (id)init {
if (self = [super init]) {
self.session = [FBSession session];
attemptAcquisition = NO;
}
return self;
}
- (id)initWithSession:(FBSession*)session {
if (self = [super init]) {
self.session = session;
attemptAcquisition = NO;
}
return self;
}
- (void)dealloc {
[_session release];
[_permissionRequest release];
[_permissionDialog release];
[_permissionName release];
[super dealloc];
}
- (void)checkForPermission:(NSString*)permissionName {
NSLog(@"Checking for Facebook permission: %@", permissionName);
_permissionName = [permissionName retain];
NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: permissionName, kFacebookExtendedPermissionParamName, nil];
_permissionRequest = [FBRequest requestWithDelegate:self];
[_permissionRequest call:kFacebookCheckForPermissionApiCallName params:params];
}
- (void)askForPermission:(NSString*)permissionName {
NSLog(@"Asking user to grant Facebook permission: %@", permissionName);
_permissionName = [permissionName retain];
_permissionDialog = [[[FBPermissionDialog alloc] init] autorelease];
_permissionDialog.delegate = self;
_permissionDialog.permission = permissionName;
[_permissionDialog show];
}
- (void)acquirePermission:(NSString*)permissionName {
attemptAcquisition = YES;
[self checkForPermission:permissionName];
}
#pragma mark FBDialogDelegate Methods
- (void)dialogDidSucceed:(FBDialog*)dialog {
[self informDelegatePermissionWasGranted];
}
- (void)dialogDidCancel:(FBDialog*)dialog {
[self informDelegatePermissionWasDenied];
}
#pragma mark FBRequestDelegate Methods
- (void)request:(FBRequest*)request didLoad:(id)result {
NSLog(@"Received response on a Facebook request!!! Request: %@, Result: %@", request, result);
if (request == _permissionRequest) {
NSLog(@"Request checking for permission %@ returned with a result of: %@", _permissionName, result);
if ([(NSString*) result intValue] == kFacebookPermissionGranted) {
[self informDelegatePermissionWasGranted];
} else {
// Permission check return NO
if (attemptAcquisition == YES) {
[self askForPermission:_permissionName];
} else {
[self informDelegatePermissionWasDenied];
}
}
}
}
- (void)request:(FBRequest*)request didFailWithError:(NSError*)error {
if ([_delegate respondsToSelector:@selector(permissionRequest:didFailWithError:)]) {
[_delegate permissionRequest:self didFailWithError:error];
}
}
#pragma mark Private
- (void)informDelegatePermissionWasGranted {
if ([_delegate respondsToSelector:@selector(permissionRequestWasGranted:)]) {
[_delegate permissionRequestWasGranted:self];
}
}
- (void)informDelegatePermissionWasDenied {
if ([_delegate respondsToSelector:@selector(permissionRequestWasDenied:)]) {
[_delegate permissionRequestWasDenied:self];
}
}
@end