菜鸟教程小白 发表于 2022-12-13 04:05:21

iphone - 重定向 UIAlertView 按钮推送通知


                                            <p><p>我已经阅读了很多关于这个问题的帖子,但没有一个能真正帮助我。这似乎很容易做到,但不知何故我无法弄清楚。</p>

<p>我想在这里做什么?
好吧,我向我的应用程序发送推送通知。一切正常。
我可以在它处于后台、非事件状态甚至应用程序未运行时处理它。
但是另一种状态——前台应用程序——让我头疼。</p>

<p>我有这个正在使用的代码片段。一切都好。
当应用程序在前台运行时,用户会获得 UIAlertview。
但是如何向 View 按钮添加操作?
我的意思是这个特定的 Action :当有人点击查看按钮时,他/她会被重定向到通过推送通知传递的 url。</p>

<p>就像我之前在代码片段中使用的一样(准确地说是这部分):</p>

<pre><code>NSString *notifUrl = ;
NSLog(@&#34;Received Push Url: %@&#34;, notifUrl);
</code></pre>

<p>我希望这是有道理的,有人可以帮助我。我迷失了这个......这是与这个主题相关的整个代码片段。</p>

<pre><code>-(void)Redirect:(NSString*)url{
    [ openURL:];
    NSLog(@&#34;%@&#34;,url);
}   

/**
   * Remote Notification Received while application was open.
   */
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    #if !TARGET_IPHONE_SIMULATOR

      NSLog(@&#34;remote notification: %@&#34;,);
      NSDictionary *apsInfo = ;

      NSString *alert = ;
      NSLog(@&#34;Received Push Alert: %@&#34;, alert);

      NSString *sound = ;
      NSLog(@&#34;Received Push Sound: %@&#34;, sound);
      AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);

      NSString *badge = ;
      NSLog(@&#34;Received Push Badge: %@&#34;, badge);
      application.applicationIconBadgeNumber = [ integerValue];

      NSString *notifUrl = ;
      NSLog(@&#34;Received Push Url: %@&#34;, notifUrl);

      // app was already in the foreground
      if ( application.applicationState == UIApplicationStateActive ) {

            UIAlertView *alertPush = [initWithTitle: @&#34;Message&#34;
                                                         message: alert
                                                          delegate: self
                                                 cancelButtonTitle:@&#34;View&#34;
                                                 otherButtonTitles: @&#34;Cancel&#34;, nil];

            ;
            ;
      }
      // app is inactive or in the background
      else {
            ;
      }

    #endif
    }

    // what to do if user taps the viewbutton in push notification alert view
    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
      if(buttonIndex == 0) {

            NSLog(@&#34;View Button has been tapped&#34;);
            // We need the url that has been passed by the push notification


      }
      else {
            // Do something
      }
    }
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>只需在 .h 文件中定义您的变量 <code>notifUrl</code> ,以便您也可以在类的其他方法中访问它。然后将 url 存储在该变量中并在 alertview 委托(delegate)方法中使用它。</p>

<pre><code>//Add this in .h file
NSString *notifUrl;

//Add this in .m file

-(void)Redirect:(NSString*)url{
    [ openURL:];
    NSLog(@&#34;%@&#34;,url);
}   

/**
   * Remote Notification Received while application was open.
   */
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

    #if !TARGET_IPHONE_SIMULATOR

      NSLog(@&#34;remote notification: %@&#34;,);
      NSDictionary *apsInfo = ;

      NSString *alert = ;
      NSLog(@&#34;Received Push Alert: %@&#34;, alert);

      NSString *sound = ;
      NSLog(@&#34;Received Push Sound: %@&#34;, sound);
      AudioServicesPlayAlertSound(kSystemSoundID_Vibrate);

      NSString *badge = ;
      NSLog(@&#34;Received Push Badge: %@&#34;, badge);
      application.applicationIconBadgeNumber = [ integerValue];

      //Define this variable in .h file so that you can access this in other methods as well
      notifUrl = ;
      NSLog(@&#34;Received Push Url: %@&#34;, notifUrl);
      ;    // this is retain value of notifUrl so that you can use it later
      // app was already in the foreground
      if ( application.applicationState == UIApplicationStateActive ) {

            UIAlertView *alertPush = [initWithTitle: @&#34;Message&#34;
                                                         message: alert
                                                          delegate: self
                                                 cancelButtonTitle:@&#34;View&#34;
                                                 otherButtonTitles: @&#34;Cancel&#34;, nil];

            ;
            ;
      }
      // app is inactive or in the background
      else {
            ;
      }

    #endif
    }

    // what to do if user taps the viewbutton in push notification alert view
    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
      if(buttonIndex == 0) {

            NSLog(@&#34;View Button has been tapped&#34;);
            NSLog(@&#34;Received Push Url: %@&#34;, notifUrl);
         ;
      }
      else {
            // Do something
      }
    }
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 重定向 UIAlertView 按钮推送通知,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/18764038/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/18764038/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 重定向 UIAlertView 按钮推送通知