Name: VIMNetworking
Owner: Wire Swiss GmbH
Description: The Vimeo iOS SDK
Forked from: vimeo/VIMNetworking
Created: 2016-07-14 14:47:24.0
Updated: 2017-10-08 20:32:45.0
Pushed: 2017-01-10 15:25:30.0
Homepage: null
Size: 1204
Language: Objective-C
GitHub Committers
User | Most Recent Commit | # Commits |
---|
Other Committers
User | Most Recent Commit | # Commits |
---|
VIMNetworking
is an Objective-C library that enables interaction with the Vimeo API. It handles authentication, request submission, and request cancellation. Advanced features include caching and powerful model object parsing.
If you'd like to upload videos check out VimeoUpload.
d this to your podfile
et 'YourTarget' do
pod 'VIMNetworking', '{CURRENT_POD_VERSION}'
Note that VIMNetworking has dependencies on AFNetworking
and VIMObjectMapper
. They will be imported as pods.
Add VIMNetworking
, VIMObjectMapper
and AFNetworking
(Release 2.5.4) as submodules of your git repository.
submodule add git@github.com:vimeo/VIMNetworking.git
submodule add git@github.com:vimeo/VIMObjectMapper.git
submodule add git@github.com:AFNetworking/AFNetworking.git
Add each submodule's classes to your project / target.
If you're also including VIMUpload
in your project / target, note that both VIMUpload
and VIMNetworking
include the Certificate/digicert-sha2.cer
file (this file is used for cert pinning). You'll have to remove one of the digicert-sha2.cer
files from your target to avoid a “Multiple build commands for output file…” warning.
On app launch, configure VIMSession
with your client key, secret, and scope strings. And once initialization is complete, authenticate if necessary.
ort "VIMNetworking.h"
.
OOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
VIMSessionConfiguration *config = [[VIMSessionConfiguration alloc] init];
config.clientKey = @"your_client_key";
config.clientSecret = @"your_client_secret";
config.scope = @"your_scope"; // E.g. "private public upload etc"
config.keychainService = @"your_service";
config.keychainAccessGroup = @"your_access_group"; // Optional
[VIMSession sharedSession setupWithConfiguration:config];
if ([[VIMSession sharedSession].account isAuthenticated] == NO)
{
NSLog(@"Authenticate...");
}
else
{
NSLog(@"Already authenticated!");
}
. . .
Note that you must specify a value for keychainService
and can optionally provide a value for keychainAccessGroup
. The role of the latter value is detailed here in the section on Keychain Access Groups.
All calls to the Vimeo API must be authenticated. This means that before making requests to the API you must authenticate and obtain an access token. Two authentication methods are provided:
Client credentials grant: This mechanism allows your application to access publicly accessible content on Vimeo.
OAuth authorization code grant: This mechanism allows a Vimeo user to grant permission to your app so that it can access private, user-specific content on their behalf.
MSession sharedSession] authenticateWithClientCredentialsGrant:^(NSError *error) {
if (error == nil)
{
NSLog(@"Success!");
}
else
{
NSLog(@"Failure: %@", error);
}
Navigate to your app target settings > Info > URL Types. Add a new URL Type, and under url scheme enter vimeo{CLIENT_KEY}
(ex: if your CLIENT_KEY is 1234
, enter vimeo1234
). This allows Vimeo to redirect back into your app after authorization.
You also need to add this redirect URL to your app on the Vimeo API site. Under ?App Callback URL?, add vimeo{CLIENT_KEY}://auth
(for the example above, vimeo1234://auth
).
L *URL = [[VIMSession sharedSession].authenticator codeGrantAuthorizationURL];
Application sharedApplication] openURL:URL];
Mobile Safari will open and the user will be presented with a webpage asking them to grant access based on the scope
that you specified in your VIMSessionConfiguration
above.
The user is then redirected back to your application. In your AppDelegate
?s URL handling method, pass the URL back to VIMAPIClient
to complete the authorization grant:
OOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
[[VIMSession sharedSession] authenticateWithCodeGrantResponseURL:url completionBlock:^(NSError *error) {
if (error == nil)
{
NSLog(@"Success!");
}
else
{
NSLog(@"Failure: %@", error);
}
}];
return YES;
With VIMNetworking
configured and authenticated, you?re ready to start making requests to the Vimeo API.
MSession sharedSession].client requestURI:@"/videos/77091919" completionBlock:^(VIMServerResponse *response, NSError *error) {
id JSONObject = response.result;
NSLog(@"JSONObject: %@", JSONObject);
equestDescriptor *descriptor = [[VIMRequestDescriptor alloc] init];
riptor.urlPath = @"/videos/77091919";
riptor.modelClass = [VIMVideo class];
MSession sharedSession].client requestDescriptor:descriptor completionBlock:^(VIMServerResponse *response, NSError *error) {
VIMVideo *video = (VIMVideo *)response.result;
NSLog(@"VIMVideo object: %@", video);
equestDescriptor *descriptor = [[VIMRequestDescriptor alloc] init];
riptor.urlPath = @"/me/videos";
riptor.modelClass = [VIMVideo class];
riptor.modelKeyPath = @"data";
MSession sharedSession].client requestDescriptor:descriptor completionBlock:^(VIMServerResponse *response, NSError *error) {
NSArray *videos = (NSArray *)response.result;
NSLog(@"Array of VIMVideo objects: %@", videos);
equestDescriptor *descriptor = [[VIMRequestDescriptor alloc] init];
riptor.urlPath = @"/videos/77091919";
riptor.modelClass = [VIMVideo class];
riptor.cachePolicy = VIMCachePolicy_NetworkOnly; // Or VIMCachePolicy_LocalOnly etc.
riptor.shouldCacheResponse = NO; // Defaults to YES
ee VIMRequestDescriptor.h/m additional request configuration options
IMRequestToken> currentRequest = [[VIMSession sharedSession].client requestURI:@"/videos/77091919" completionBlock:^(VIMServerResponse *response, NSError *error) {
id JSONObject = response.result;
NSLog(@"JSONObject: %@", JSONObject);
MSession sharedSession].client cancelRequest:currentRequest];
r
MSession sharedSession].client cancelAllRequests];
If you want to use your own OAuth token you can circumvent VIMSession
and its authentication mechanisms and make requests like so:
lient *client = [[VIMClient alloc] initWithDefaultBaseURL];
nt.requestSerializer = ...
here client.requestSerializer is an AFJSONRequestSerializer subclass that sets the following information for each request:
serializer setValue:@"application/vnd.vimeo.*+json; version=3.2" forHTTPHeaderField:@"Accept"];
serializer setValue:@"Bearer your_oauth_token" forHTTPHeaderField:@"Authorization"];
ent requestURI:@"/videos/77091919" completionBlock:^(VIMServerResponse *response, NSError *error)
id JSONObject = response.result;
NSLog(@"JSONObject: %@", JSONObject);
If you'd like to turn on caching for this lighter weight use case:
lient *client = [[VIMClient alloc] initWithDefaultBaseURL];
nt.cache = VIMCache *cache = [VIMCache sharedCache];
r client.cache = VIMCache *cache = [[VIMCache alloc] initWithName:@"your_cache_name"];
VIMObjectMapper
converts JSON into model objects. If you'd like to use it on its own (by including the raw source in your project, or by including the ObjectMapper subspec, follow the steps below.
Make your custom model object a subclass of VIMModelObject
and optionally implement the VIMMappable
protocol methods:
ort "VIMModelObject.h"
ss VIMPictureCollection;
erface VIMUser : VIMModelObject
perty (nonatomic, copy) NSString *name;
perty (nonatomic, strong) VIMPictureCollection *pictureCollection;
perty (nonatomic, strong) NSDictionary *uploadQuota;
perty (nonatomic, strong) NSArray *websites;
ort "VIMUser.h"
ort "VIMPictureCollection.h"
ort "VIMObjectMapper.h"
lementation VIMUser
gma mark - VIMMappable // All methods are optional, implement to specify how the object should be "inflated"
SDictionary *)getObjectMapping
rn @{@"pictures": @"pictureCollection"};
lass)getClassForCollectionKey:(NSString *)key
[key isEqualToString:@"uploadQuota"])
rn [NSDictionary class];
[key isEqualToString:@"websites"])
rn [NSArray class];
rn nil;
lass)getClassForObjectKey:(NSString *)key
[key isEqualToString:@"pictures"])
rn [VIMPictureCollection class];
rn nil;
oid)didFinishMapping
o any post-parsing work you might want to do
= {
= "Homer Simpson";
ures = {
= "...";
s = (...);
oad_quota" = { ... };
ites = ( ... );
ctionary *JSON = ...;
bjectMapper *mapper = [[VIMObjectMapper alloc] init];
per addMappingClass:[VIMUser class] forKeypath:@"user"];
ser *user = [mapper applyMappingToJSON:JSON];
Please file it in the git issue tracker.
If you'd like to contribute, please follow our guidelines found in CONTRIBUTING.md.
VIMNetworking
is available under the MIT license. See the LICENSE file for more info.
Tweet at us here: @vimeoapi.
Post on Stackoverflow with the tag vimeo-ios
.
Get in touch here.
Interested in working at Vimeo? We're hiring!