33

私のアプリのユーザーは、Facebook または Google の 2 つのサービスを使用してログインできます

ただし、次の場合はすべて正常に機能します。

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation: (id)annotation {
    ...
}

Facebook のコールバックまたは Google のコールバックを呼び出すことを決定する必要があります

ユーザーがアプリを持っている場合、sourceApplication で決定するよりも簡単ですが、そうでない場合 (ネイティブの Facebook アカウントがリンクされていない、FB アプリがない、GooglePlus アプリがない)、ブラウザーにリンクします:( Facebook または Google から

何を呼び出すかを決定する方法はありますか?お気に入り

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation: (id)annotation {

    // how to decide?
    if (facebook) {

        return [FBSession.activeSession handleOpenURL:url];

    } else if (google) {

        return [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation];

    }

}
4

10 に答える 10

39

URL を明示的に確認する必要はありません。以下のコードで確認できます。

- (BOOL)application: (UIApplication *)application openURL: (NSURL *)url sourceApplication: (NSString *)sourceApplication annotation: (id)annotation
{

    if ([GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation]) {
        return YES;
    }else if([FBAppCall handleOpenURL:url sourceApplication:sourceApplication]){
        return YES;
    }

    return NO;
}
于 2015-03-25T13:19:26.960 に答える
5

You can Try the following :

if ([[url absoluteString] rangeOfString:@"<Your Google Bundle ID>"].location ==            NSNotFound)
{
    // Call FBAppCall's handleOpenURL:sourceApplication to handle Facebook app responses
    BOOL wasHandled = [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];
    // You can add your app-specific url handling code here if needed
    return wasHandled;
}
else
{
    return [GPPURLHandler handleURL:url
                  sourceApplication:sourceApplication
                         annotation:annotation];
}
return YES;

Call the above method in

(BOOL)application:(UIApplication *)application
          openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
       annotation:(id)annotation 

in your appDelegeate.m

Basically what this is going to do is examine the url prefix and then call the google+ method if url prefix is ur google+ bundle id , and if not , it'll call the fb method . Hope this helps

于 2014-01-31T06:04:29.933 に答える
-4
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
   sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation
{


   if( [GPPURLHandler handleURL:url
                  sourceApplication:sourceApplication
                     annotation:annotation])
   {
       return [GPPURLHandler handleURL:url
                     sourceApplication:sourceApplication
                            annotation:annotation];
   }
    else if([[FBSDKApplicationDelegate sharedInstance] application:application
                                                          openURL:url
                                                sourceApplication:sourceApplication
                                                       annotation:annotation])
    {
        return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                              openURL:url
                                                    sourceApplication:sourceApplication
                                                           annotation:annotation];
    }
    return NO;
}
于 2015-08-28T09:26:11.853 に答える