我们有一个在Facebook上运行的网络应用程序(即在不同域的iFrame中运行).如果Safari用户将Cookie和网站数据设置为默认值"允许来自我访问的网站",我们通过localStorage.setItem存储的数据就像sessionStorage一样,即它在用户当前会话之外不可用(即在用户关闭后)标签).如果我们将设置更改为"始终允许",则可以像Chrome,IE等一样正常工作
作为测试,我们已经尝试直接将浏览器导航到我们应用的域名(https://ourappname.appspot.com),并且在那里工作正常.此外它应该是一个真正的访问网站,但当回到Facebook内的游戏时,问题仍然存在.
请注意,setItem调用是成功的,只是getItem在后续会话中不返回任何内容.(因此,当用户进行私密浏览并且setItem调用本身因配额超出错误而失败时,就不一样了.)
我们需要做些什么来支持Safari,以便我们的应用程序在Facebook中运行,可以按照预期使用localStorage,数据在会话之间存活?
GameKit是否允许您以编程方式邀请特定的游戏中心朋友参加比赛,即无需呈现GC ViewController?以下handleInviteFromGameCenter文档似乎暗示您可以填充GKMatchRequest.playersToInvite并将其与[GKTurnBasedMatch findMatchForRequest]一起使用:
当您的委托收到此消息时,您的应用程序应创建一个新的GKMatchRequest对象,并将playersToInvite参数分配给匹配请求的playersToInvite属性.然后,您的应用程序可以调用GKTurnBasedMatch类方法findMatchForRequest:withCompletionHandler:以编程方式查找匹配项,也可以使用该请求实例化新的GKTurnBasedMatchmakerViewController以显示该播放器的用户界面.
但是我发现当findMatchForRequest用填充的匹配调用我的完成块时,传递给它的GameCenter ID不会被设置为第二个玩家.相反,它是空的,状态是"匹配".因此,当我调用endTurnWithNextParticipant时,它会成功,但我的第二台设备上没有收到邀请.这说明了我在做什么:
GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease];
request.minPlayers = 2;
request.maxPlayers = 2;
request.playersToInvite = [NSArray arrayWithObjects: otherPlayerGCID,nil ];
[GKTurnBasedMatch findMatchForRequest:request
withCompletionHandler:^(GKTurnBasedMatch *match, NSError *error)
{
if (error)
NSLog(@"returned from fimdmatch but with error");
else if (match != nil) {
NSLog(@"match returned success and match populated");
NSArray* otherPlayers = [match participants];
if (otherPlayers.count>1) {
NSData* placeholder = [@"no data" dataUsingEncoding:NSUTF8StringEncoding];
[match endTurnWithNextParticipant:[otherPlayers objectAtIndex:1]
matchData:placeholder
completionHandler:^(NSError *error)
{
if (error)
NSLog(@"returned from END …Run Code Online (Sandbox Code Playgroud) 如果我们在调用closeAndClearTokenInformation之后调用openWithBehavior,则会导致EXC_BAD_ACCESS.无论是使用本机iOS内置对话还是使用快速切换对话框.
我们的代码登录FB,第一次通过工作:
if (![FBSession activeSession]) {
#ifdef FREE_APP
NSString* suffix = @"free";
#else
NSString* suffix = @"paid";
#endif
FBSession *session = [[[FBSession alloc] initWithAppID:@"111111111111111"
permissions:permissions
urlSchemeSuffix:suffix
tokenCacheStrategy:nil] autorelease];
[FBSession setActiveSession:session];
}
else if ([FBSession activeSession].isOpen)
[[FBSession activeSession] close];
[[FBSession activeSession] openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent
completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
[self sessionStateChanged:session state:state error:error];
}];
Run Code Online (Sandbox Code Playgroud)
我们的注销代码,之后上面的代码在openWithBehavior之后失败:
[[FBSession activeSession] closeAndClearTokenInformation];
Run Code Online (Sandbox Code Playgroud)
我最初使用openActiveSessionWithReadPermissions而不是openWithBehavior,如3.1文档中规定的那样,它不会崩溃,但是从FB app/Safari切换回的应用程序不起作用.也许是因为需要有后缀?如果最容易修复应用程序切换并返回到那个,请告知.
谢谢.
我不知道如何解决这个 PyCharm 警告。我在将帐户迁移到新 Mac 后开始获取它。(我也刚刚更新了 PyCharm。)
另一个症状是 PyCharm 编辑器抱怨对“logging.info()”等命令的方法的引用。即使当我运行我的应用程序时,它似乎运行良好。
而且......我还发现PyCharm failed to generated sculpts。我确实卸载并重新加载了 2.5 解释器,但仍然得到相同的结果。
谢谢。
我们允许现有的移动应用用户通过电子邮件,短信或Facebook请求邀请他们的朋友.只要被邀请的用户以与他们被邀请相同的方式(即通过相同的电子邮件,电话号码或Facebook)进行注册,我们就可以跟踪"已接受"的邀请.否则他们会无法跟踪.
我们知道在邀请用户点击链接时(在电子邮件中,短信邀请中)识别设备是可靠的方式,然后在安装应用程序后,将设备识别为同一设备并进行匹配.我们已经看到了一个可以解决问题的应用程序.
我们需要适用于iOS和Android的解决方案.最大的挑战是两个平台沙盒webView,因此当最初点击邀请链接时,没有cookie可以从新安装的应用程序中的webview中检测到.并且,我们不希望通过启动浏览器的任何类型的应用交换回转来破坏用户体验,然后让它重新启动我们的应用程序.
我们探索过的技术似乎都不是理想的.我们研究过:匹配来电者的IP地址(在一个小的时间窗口内); 浏览器"指纹识别"; 剪贴板复制/粘贴方案; 等人 此外,这些方法似乎都不是上述应用程序使用的特殊魔法:)
我们希望升级到3.x,这样我们iOS 6/iPhone 5上的用户就可以获得最简化的FB体验......鉴于此,我是否面临FB集成重写,或者我是否可以使用折旧的标题并继续使用3.1 SDK与3.1 SDK?
我们依赖的一些关键方法和请求是: [ad.facebook authorize:perms],shouldExtendAccessToken,extendAccessTokenIfNeeded,isSessionValid,dialog:@"feed"andParams:params andDelegate:delegate,"https://graph.facebook .com/me?fields = id,email,first_name&access_token =",et.al.3.1示例项目中的一些搜索使得所有这些项目都被替换了 - 我想这不仅仅是名称更改.
我没有找到从3.0升级到3.1升级的2.x到3.x版本 - 如果我忽略了这一点,请提供建议.
在最近尝试升级到3.0时,我在尝试使用折旧的API时遇到了重大的破坏(重复的SBJson标头,非解析的FB标头),一旦编译完成,handleOpenURL似乎坏了,它会重新切换到FB a第二次,然后崩溃.而且我遇到的帖子表明可能存在禁用3.x的ARC的问题(我们不能使用它,因为我们有C++).
我还没有开始2.x到3.1.也许这会更顺畅,但是我希望从那些在第二次长时间蝙蝠之前走到我面前的人那里获得一些见解 - 非常感谢.
将我们的应用程序转换为Python 2.7,配置多线程,并在app.yaml中引用mapreduce,就像这样......
- url: /mapreduce(/.*)?
script: mapreduce.main.app
#script: google.appengine.ext.mapreduce.main.app
login: admin
Run Code Online (Sandbox Code Playgroud)
并像这样调用mapreduce ...
control.start_map(
"FNFR",
"fnfr.fnfrHandler",
"mapreduce.input_readers.BlobstoreLineInputReader",
{"blob_keys": blobKey},
shard_count=32,
mapreduce_parameters={'done_callback': '/fnfrdone','blobKey': blobKey, 'userID':thisUserID})
Run Code Online (Sandbox Code Playgroud)
我们得到以下堆栈跟踪...
Traceback (most recent call last):
File "/base/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 189, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "/base/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 241, in _LoadHandler
raise ImportError('%s has no attribute %s' % (handler, name))
ImportError: <module 'mapreduce.main' from '/base/data/home/apps/s~xxxxxxonline/2.361692533819432574/mapreduce/main.pyc'> has no attribute app
Run Code Online (Sandbox Code Playgroud)
我发现了一个SO参考(如何将我的app.yaml迁移到2.7?)但是从我的yaml可以看出,我想我已经尝试了所有组合来尝试解决它.谢谢.
facebook ×3
ios ×3
javascript ×2
sdk ×2
android ×1
game-center ×1
gamekit ×1
mapreduce ×1
mobile ×1
persistence ×1
pycharm ×1
python-2.7 ×1
safari ×1