12

これは重複しているように見えるかもしれませんが、問題を中心としたすべての質問に答えましたが、それでもアプリでこれを機能させることができないようです。

Facebook DeveloperサイトのiOSチュートリアルに従い、次のことを行いました。

  1. FacebookアプリIDを取得するためのFacebookアプリを作成しました。
  2. このアプリIDを定数に割り当て、それを使用してアプリ内のFacebookオブジェクトを初期化します。
  3. アプリにマルチタスクのフラグが設定されていることを確認しました
  4. URLドロップダウンの下のplistにfbAPP_IDを設定しました
  5. AppDelegateをFBSessionDelegateにし、非常に単純なfbDidLoginおよびfbDidNotLoginデリゲートメソッドを実装しました。

バージョン:LionのXCode 4.3.2、iOS 5.1、Facebook iOS 4.1.1

これらすべてと私はまだ、Facebookが承認したときにアプリに制御を戻すようにさせることができないようです。代わりにFacebookにとどまります。

コード:(ここで表示するためにFB_APP_IDが基本番号に変更されていることに注意してください)

AppDelegate.h:

#import <UIKit/UIKit.h>
#import "FBConnect.h"

#define FB_APP_ID @"1234567890"

@interface AppDelegate : UIResponder <UIApplicationDelegate, FBSessionDelegate>

@property (strong, nonatomic) UIWindow *window;
@property (nonatomic, strong) Facebook* facebook;

@end

AppDelegate.m:

#import "AppDelegate.h"

@implementation AppDelegate
@synthesize window = _window;
@synthesize facebook = _facebook;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    _facebook = [[Facebook alloc] initWithAppId:FB_APP_ID andDelegate:self];
    if (![_facebook isSessionValid])
    {
        [_facebook authorize:nil];
    }
}

- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL *)url
{
    return [_facebook handleOpenURL:url];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    return [_facebook handleOpenURL:url];
}

- (void)fbDidLogin
{
    NSLog(@"App logged in");
}

- (void)fbDidNotLogin:(BOOL)cancelled
{
    NSLog(@"App did not login");
}

@end

関連するInfo.plistポートン:

ここに画像の説明を入力してください

Facebookアプリの画面(ほとんどがピンク色になっています):

Facebookアプリ画面

注:基本設定のみで試してみました。また、偽のiTunesストアIDを使用してiOSネイティブアプリの設定を試してみましたが、プロビジョニングプロファイルのバンドルIDは同じです。

私が何をしても、常にFacebookが読み込まれ、アプリの承認を求められます。その後、アプリに戻るのではなく、認証画面ウィンドウを閉じてFacebook画面に表示されます。

また、注意:認証トークンと有効期限をチェックしていないため、常に尋ねられることはわかっています.....それが次のステップです....今のところ、少なくとも前にアプリに戻してもらいたいです心配です。

私はここで何かを逃したことがありますか?Facebookを自分のアプリに戻してもらうために他に何かできることはありますか?

編集:また、デバッグ時に、何らかの理由でどちらかのopenURLが呼び出される場所が見つからないようです。

編集#2:シミュレーターで実行すると、Safari経由でFBダイアログが読み込まれ(期待どおり)、承認すると、safariは、アプリに戻るために使用しようとしているURLが無効であるかのようにエラーをスローします:

シミュレーターサファリエラー

私のfb1234567890は、Info.plistで私が知っている限り正しくセットアップされているので、これはまだ多くを教えてくれません。

4

4 に答える 4

19

info.plistの形式が正しくないようです

URLスキームが「URLスキーム」と呼ばれるアイテム(正確には配列)の下にネストされていることを確認します

この配列には、アプリを起動できるすべての可能なURLスキームが含まれている必要があります

URLスキームの詳細については、添付の画像を参照してください

urlスキーム

また、「URL識別子」はバンドル識別子である必要があります。com.mycompany.myappこれは、プロビジョニングプロファイルで指定する識別子と一致する必要があります

お役に立てれば!

于 2012-05-16T22:54:22.320 に答える
3

これらの手順に従う必要があるすべて

ステップ1:

Facebook開発者側のもの:

アプリがすでに送信されている場合は、iphone / ipad appstore idを入力します。それ以外の場合は、空のままにします。 Facebook開発者アカウントのアプリID設定

ステップ2:

次のXCode:

移動 Target > Info > URL Types>プラスアイコンをクリックして、次のようなアイテムを追加します- URLスキーム設定

私のアプリケーションでは、FacebookとGoogleの両方を介してログインするオプションがあったため、2つのURLタイプを作成しました。2つ目はFacebookのURLタイプの設定です。URLスキームは、開始時にFacebookDeveloperアカウントからのFacebookアプリIDになりますfb。したがって、Facebook開発者アプリIDがの9876543267575645場合、URLスキームはになりfb9876543267575645ます。

ステップ3:

次に、info.plistに新しいキーを追加する必要があります。したがって、同じ画面にとどまり、FacebookAppID次の画面のように追加します。 info.plist設定

FacebookのOAuthが成功すると、これらすべてがアプリを元に戻します。

ステップ4:

AppDelegate休憩はクラスで行います。このメソッドをに追加するだけですAppDelegate.m

NSString *retURL = [NSString stringWithFormat:@"%@", url];    
if ([retURL rangeOfString:facebookid].location != NSNotFound)
{
    // if your application is coming back from facebook native app.
    return [_facebook handleOpenURL:url];
}
else
{
    // if your app is coming back from google plus oauth.
    return [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation];
}

facebookこのすべての間に、インスタンスを初期化して合成する必要がありますAppDelegate.m

@synthesize facebook = _facebook;

didFinishLaunchingWithOptions

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    _facebook = [[Facebook alloc] initWithAppId:facebookid];
    // rest of your code is already here......
}

もう1つ重要なこと。私がこれらのステップを実行している間、私はこれを達成するためにあまりにも多くの研究をしました、そして最終的には作業がここにあります。これらの設定は、2つのアプリで行いました。

しかし、3つ目のアプリを作成している間、最初から始めて、 STEP1STEP3に従わず、出来上がりです。リダイレクトは機能します。そのため、アプリでFacebookにログインしている間は、Facebook開発者アカウントのネイティブiOSアプリの設定は必要ないと思います。

于 2014-01-07T12:36:45.157 に答える
2

私は別の問題に遭遇しました。生のInfo.plistファイルを編集して、以下を追加しました。

<key>URL Types</key>
<array>
    <dict>
        <key>URL Schemes</key>
        <array>
             <string>fbxxxxxxxxx</string>
        </array>
    </dict>
</array>

キーが「URLTypes」、「URL Schemes」、「URL Identifier」ではなく、「CFBundleURLTypes」、「CFBundleURLSchemes」、「CFBundleURLIdentifier」であるため、これは機能しませんでした。Xcodeは、エディターでその名前を「URLタイプ」、「URLスキーム」、および「URL識別子」に変更します。

xcodeでInfo.plistを確実に選択するには、右クリック->生のキー/値を表示します。

ここに画像の説明を入力してください

于 2012-12-14T13:37:04.633 に答える
0

上記のいずれも、またはSOに関する他の回答も、まったく同じ問題を抱えているように見えましたが、私にはうまくいきませんでした。

ただし、「ディープリンク」を有効にした場合は完全に機能したため、上記のすべてを組み合わせて、そのオプションも有効にした可能性があります。

于 2013-10-19T11:52:51.770 に答える