我们有一个适用于Android的Cordova / PhoneGap应用程序,用户可以使用PhoneGap Facebook Connect插件(https://github.com/Wizcorp/phonegap-facebook-plugin)使用他们的Facebook帐户登录。
但是,每次用户在设置中更改国家/地区时,我们都需要以编程方式使用新的AppId / AppName更新Facebook会话,因为我们为每个国家/地区设置了不同的Facebook应用。
我们可以使用它创建一个连接到Phonegap Facebook Connect插件的自定义插件,每当用户更改国家或尝试使用Facebook登录时调用该插件:
package com.OURAPP.facebook;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaArgs;
import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CordovaWebView;
import org.json.JSONException;
import android.app.Activity;
import com.facebook.Session;
public class FacebookConnectMultiPlugin extends CordovaPlugin {
private Activity context;
@Override
public void initialize(CordovaInterface cordova, CordovaWebView webView) {
context = cordova.getActivity();
}
@Override
public boolean execute(String action, CordovaArgs args, CallbackContext callbackContext) throws JSONException {
if (action.equals("changeAppId")) {
String appId = args.getString(0);
Session session = new Session.Builder(context).setApplicationId(appId).build();
Session.setActiveSession(session);
callbackContext.success();
return true;
} else {
return false;
}
}
}
然而,在将Phonegap Facebook Connect更新到最新版本(现在它使用新的Facebook SDK)后,我们的自定义插件停止工作,我们无法弄清楚出了什么问题。
如果有帮助,我们在iOS上遇到了同样的问题,但我们可以解决它。在那种情况下,我们缺少更新Facebook AppName,但是,我们无法在Android上找到任何方法。
这是我们的旧代码:
#import "FacebookConnectMultiPlugin.h"
#import <FacebookSDK/FacebookSDK.h>
@interface FacebookConnectMultiPlugin ()
@property (strong, nonatomic) NSString *appid;
@end
@implementation FacebookConnectMultiPlugin
- (void)changeAppId:(CDVInvokedUrlCommand*)command
{
CDVPluginResult* pluginResult = nil;
NSString* myarg = [command.arguments objectAtIndex:0];
NSLog(@"This is the app id: %@", myarg);
FBSession *session = [[FBSession alloc] initWithAppID:myarg
permissions:nil
defaultAudience:FBSessionDefaultAudienceFriends
urlSchemeSuffix:nil
tokenCacheStrategy:nil];
[FBSession setActiveSession:session];
if (myarg != nil) {
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
} else {
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Arg was null"];
}
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
@end
这是新代码:
#import "FacebookConnectMultiPlugin.h"
#import <FacebookSDK/FacebookSDK.h>
@interface FacebookConnectMultiPlugin ()
@property (strong, nonatomic) NSString *appid;
@end
@implementation FacebookConnectMultiPlugin
- (void)changeAppId:(CDVInvokedUrlCommand*)command
{
CDVPluginResult* pluginResult = nil;
NSString* myarg = [command.arguments objectAtIndex:0];
NSString* myDisplayName = [command.arguments objectAtIndex:1];
NSLog(@"----------------------");
NSLog(@"This is the app id: %@", myarg);
NSLog(@"This is the display name: %@", myDisplayName);
NSLog(@"----------------------");
FBSession *session = [[FBSession alloc] initWithAppID:myarg
permissions:nil
defaultAudience:FBSessionDefaultAudienceFriends
urlSchemeSuffix:nil
tokenCacheStrategy:nil];
[FBSession setActiveSession:session];
[FBSettings setDefaultAppID:myarg];
[FBSettings setDefaultDisplayName:myDisplayName];
if (myarg != nil) {
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
} else {
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"Arg was null"];
}
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
@end