サーバーからプッシュ通知を受信しているIphoneアプリケーションがあります。今、メッセージを表示するためにView Controllerに行きます.同じメッセージがテーブルビューにロードされている場所.だから問題ではありません.メッセージの種類、1つはリンクで、もう1つは以前のメッセージです.リンクの場合はサファリで開きたいので、いつものようにテーブルビューに移動する必要はありません.誰かがこれを達成するのを手伝ってくれますか?
2 に答える
プッシュ通知をクリックすると、関数で辞書が取得されます - didReceiveRemoteNotification:
このコードを試してください:-
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSLog(@"remote notification: %@",[userInfo description]);
if (userInfo)
{
if ([[userInfo allKeys] containsObject:@"aps"])
{
if([[[userInfo objectForKey:@"aps"] allKeys] containsObject:@"alert"])
{
if([[[userInfo objectForKey:@"aps"] allKeys] containsObject:@"alert"])
{
NSString *urlString = [[userInfo objectForKey:@"aps"] objectForKey:@"alert"];
NSURL *url = [NSURL URLWithString:urlString];
if(url)
{
[[UIApplication sharedApplication]openURL:url]; // open in the safari...
}
else
{
// use the message in table view
}
}
}
}
}
}
プッシュ通知はアプリケーションに関連付けられているため、アプリケーションからのプッシュ通知でサファリを直接開くことはできません。ただし、1 つの回避策は次のようになります。
- ユーザーが通知に応答する (つまり、スワイプしてロック画面で開く)
アプリが開き、通知からのデータがアプリケーション
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
メソッドに渡されます。次に、渡されたデータをそのように調べることができますNSDictionary *dictionary = [launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]; // If dictionary is not nil, then your app is launched due to a push notification if (dictionary != nil) { NSDictionary *payload = [tmpDic objectForKey:@"aps"]; }
ペイロードを取得したら、コンテンツを確認し、それが URL の場合は、Safari URL スキームを呼び出して URL を渡します。そのようです
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: <URL from payload>]];
これは、やりたいことを達成するのに役立ちますが、OS がユーザーをサファリに切り替える前に、ユーザーが最初にアプリを簡単に見ることを意味する場合があります。
補足ですが、なぜこれをやりたいのですか?ユーザーが通知からランダムな URL を起動するべきではありません。Apple はそれをあまり望んでいないと思います。おそらく、ユーザーは最初にアプリで URL に関する情報を確認し、次にそれを Safari で開くかどうかを選択する必要があるのではないでしょうか?